通过价值/参考,什么?

onl*_*man 5 java methods arguments

这个程序输出6作为输出,但当我取消注释第9行时,输出为5.为什么?我认为ba不应该改变,应该保持在主要的5.

1  class C1{
2      int a=5;

3      public static void main(String args[]){
4          C1 b=new C1();
5          m1(b);
6          System.out.println(b.a);
7      }

8      static void m1(C1 c){
9          //c=new C1();
10         c.a=6;
11    }
12 }
Run Code Online (Sandbox Code Playgroud)

mpr*_*hat 10

当您在Java中传递对象时,它们作为引用传递方式,意味着bmain方法中引用的对象和方法c中的参数m1,它们都指向同一个对象,因此当您将值更改为6时,它会反映在main方法中.

现在,当你试着做c = new C1();,那么你做出c指向一个不同的对象,但b仍然指向到您在创建对象main的方法,因此更新值6不是主要方法可见,你会得到5.

  • 这是一篇非常好的文章,解释了@mprabhat对图片的评价,如果这对你有帮助的话.http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html (3认同)