开发者社区> 问答> 正文

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       //不理解 

展开
收起
爵霸 2016-06-15 08:42:49 1767 0
1 条回答
写回答
取消 提交回答
  • 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指向的引用没有改变,后面就不难理解了。

    2019-07-17 19:38:36
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载