|
最后,我给出我上面提出到最后要给出的反面例子。
随便写一个,在CloneFooA 的基础上做了少许改动,内容如下:
public class CloneFooA implements Cloneable { private String strA; private int intA;
public CloneFooA(String strA, int intA) { this.strA = strA; this.intA = intA; }
public String getStrA() { return strA; }
public void setStrA(String strA) { this.strA = strA; }
public int getIntA() { return intA; }
public void setIntA(int intA) { this.intA = intA; }
/** * @return 创建并返回此对象的一个副本。 * @throws CloneNotSupportedException */ public Object clone() throws CloneNotSupportedException { //直接调用父类的clone()方法,返回克隆副本 return super.clone(); }
/** * @return 返回运行时的对象 */ public CloneFooA getInstance(){ return this; }
public static void main(String args[]){ CloneFooA fooA=new CloneFooA("aa",11); System.out.println(fooA.getStrA()+" "+fooA.getIntA());
CloneFooA fooA1=fooA.getInstance(); System.out.println(fooA1.getStrA()+" "+fooA1.getIntA()); if(fooA==fooA1) System.out.println("fooA和fooA1内存地址相等!");
System.out.println("-------------------------");
//改变后fooA或者fooA1中任何一个,看看另外一个是否会改变 fooA1.setStrA("bb"); System.out.println(fooA.getStrA()+" "+fooA.getIntA()); System.out.println(fooA1.getStrA()+" "+fooA1.getIntA());
if(fooA==fooA1) System.out.println("fooA和fooA1内存地址相等,改变fooA1后,fooA的值也跟着变化了"); } }
运行结果:
aa 11 aa 11 fooA和fooA1内存地址相等! ------------------------- bb 11 bb 11 fooA和fooA1内存地址相等,改变fooA1后,fooA的值也跟着变化了
Process finished with exIT code 0 上一页 [1] [2] [3] |