AClass a = new AClass();
BClass b = new BClass();
b.j=5;
a.aMethod(b);
j=b.j;// why j will be 20, not 100? 清说的详细一点。class AClass {
void aMethod (BClass bb) {
bb.j = 20;
bb= new BClass ();
bb.j = 100;
}
} class BClass {
int j = 0;//I guess it should be accessable by public.
} 程序也许有错,意思大概就是这样。为什么J=20?不是100?
BClass b = new BClass();
b.j=5;
a.aMethod(b);
j=b.j;// why j will be 20, not 100? 清说的详细一点。class AClass {
void aMethod (BClass bb) {
bb.j = 20;
bb= new BClass ();
bb.j = 100;
}
} class BClass {
int j = 0;//I guess it should be accessable by public.
} 程序也许有错,意思大概就是这样。为什么J=20?不是100?
//这里的bb指向第一个BClass b所对应的实例;
bb= new BClass ();
//从新指向一个新的BClass实例 ,bb的指向已经改变
bb.j = 100; 为新对象给值
j=b.j;---这里的b指向第一个BClass b 所对应的实例个
关键要理解java是引用传值
BClass b = new BClass();
b.j=5;
System.out.println("b.j="+b.j);
System.out.println(" b before come to aMethod is "+b.toString());
a.aMethod(b);
System.out.println(" b after come to aMethod is "+b.toString());
System.out.println("b.j="+b.j);
}
}class BClass {
int j = 0;//I guess it should be accessable by public.
public BClass(int a){
j=a;
}
public BClass(){}
}
class AClass {
void aMethod (BClass bb) {
bb.j = 20;
System.out.println(" bb just come to aMethod is "+bb.toString());
bb=null;
//System.out.println("bb.j="+bb.j);
bb= new BClass ();
bb.j = 100;
System.out.println("bb.j="+bb.j);
System.out.println(" bb after new classed is "+bb.toString());
}
}
结果运行testAB时,输出是:b.j=5
b before come to aMethod is BClass@1a5ab41
bb just come to aMethod is BClass@1a5ab41
bb.j=100
bb after new classed is BClass@18e3e60
b after come to aMethod is BClass@1a5ab41
b.j=20
后面是唯一的对象的hashcode,可见在aMethod中bb的确指向了新的对象,可是退出了aMethod之后,一切有恢复了,b还是指向原来的b,即hashcode仍然是1a5ab41