//代码如下:
class Bar(){
int barNum = 28;
}
class Foo(){
Bar myBar = new Bar();
void changeIt(Bar myBar){
myBar.barNum = 99;
System.out.println("myBar.barNum in changeIt is " + myBar.barNum);
myBar = new Bar();
myBar.barNum = 420;
System.out.println("myBar.barNum in changIt is now " + myBar.barNum);
}
public static void main(String[] args){
Foo f = new Foo();
System.out.println("f.myBar.barNum is " + f.myBar.barNum);
f.changeIt(f.myBar);
System.out.println("f.myBar,barNum after changeIt is " + f.myBar.barNum);
}
}
//代码输出结果如下:
f.myBar.barNum is 28
myBar.barNum in changeIt is 99
myBar.barNum in changeIt is now 420 //不理解
f.myBar.barNum after changeIt is 99 //不理解
f.myBar传入方法changeIt(f.myBar)时,方法changeIt(Bar bar2)的参数变量bar2指向f.myBar变量,即 bar2=f.myBar.然后bar2改变值barNum为99,此时f.myBar.barNum=99,因为bar2和f.myBar指向的是同一引用。接着改变bar2指向另一个新创建的实例,而f.myBar指向的引用没有改变,后面就不难理解了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。