java中隐藏对象引用问题(请各位解释)

发布于 2021-11-17 16:22:16 字数 1342 浏览 916 评论 6

//代码如下:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

风透绣罗衣 2021-11-22 17:38:56

这其实就是java到底是传值,还是传引用的问题而已。

丢了幸福的猪 2021-11-22 14:58:16

换个简单的想法

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

}

各自安好 2021-11-22 14:06:11

直接说是引用和局部变量的问题嘛。

奈何桥上唱咆哮 2021-11-22 11:22:36

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指向的引用没有改变,后面就不难理解了。

滥情空心 2021-11-22 10:49:38

你把changeIt的形参改名再试试

因为看清所以看轻 2021-11-21 13:50:08

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指向的引用没有改变,后面就不难理解了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文