java中隐藏对象引用问题(请各位解释)
//代码如下:
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 //不理解
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这其实就是java到底是传值,还是传引用的问题而已。
换个简单的想法
public static void main(String[] args){
String str1=“123”;
//Sysout str1
str1="456";
//Sysout str1
String str2=str1;//这里就是你传的参数,其实你把参数改成changeIt(Bar myBar2)会更容易明白
//Sysout str2
str2="789";
//Sysout str2
//Sysout str1
}
直接说是引用和局部变量的问题嘛。
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指向的引用没有改变,后面就不难理解了。
你把changeIt的形参改名再试试
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指向的引用没有改变,后面就不难理解了。