java中隐藏对象引用问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java中隐藏对象引用问题

爵霸 2016-06-15 08:42:49 1174
//代码如下: 

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       //不理解 
引用问题 java引用 对象问题 对象引用 用java问题
分享到
取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 19:38: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指向的引用没有改变,后面就不难理解了。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

相似问题
最新问题