黑马程序员技术交流社区

标题: 被搞晕了,求详细的解释。 [打印本页]

作者: gongyanfa123    时间: 2015-7-5 14:10
标题: 被搞晕了,求详细的解释。
class Test {

        int num = 3;
        public static void main(String[] args) {

                Test t = new Test();
                t.num = 5;
                method(new Test());
                System.out.println(t.num);
        }
        public static void method(Test t){
                t.num = 6;
        }
}

作者: icichacici    时间: 2015-7-5 16:49
哎,我也觉得应该是6才对啊,怎么是5呢?
作者: 825176857    时间: 2015-7-5 17:07
  1.        public static void method(Test t1){
  2.                 t1.num = 6;
  3.         }
复制代码
改一下
这是引用传递!堆中创建了一个T--num=3然后赋值t.num=5 所以t--num=5
方法method() 传了个T1 T1--num=6 更T没关系 所以t--num=5
作者: very爱    时间: 2015-7-5 18:12
因为分别给两个对象赋值,他们之间没有关系,分清楚对象就好说了
作者: linjian931219    时间: 2015-7-5 19:25
我也看晕了,Test t=new Test();到底是new了个啥
作者: samove    时间: 2015-7-5 19:53
  1. class Test {

  2.          int num = 3;
  3.          public static void main(String[] args) {

  4.                  Test t = new Test();
  5.                  t.num = 5;
  6.                  method(new Test());
  7.                  System.out.println(t.num);
  8.          }
  9.          public static void method(Test t){
  10.                  t.num = 6;
  11.          }
  12. }
复制代码

这是一个很有意思的东东。
关键在于method方法调用,其实第一步:Test t = new Test(); 这个new Test()会有一个地址值,比如说是:0x0011
那么这个t指向的就是0x0011指向的一个堆内容。t.num = 5;是对地址为0x0011Test类操作的。
第二步:method(new Test());这里的new Test()会有一个新的地址值,比如:0x0022
传到method方法里,method方法里又将0x0022地址赋值给(anotherTest),虽然在这里表面上看都t,其实与main方法里的t并不是同一个t。
然后,在method方法里t.num = 6 ,就不难理解了,这里是给 0x0022 指向的Test内容赋值。再回到main方法里,System.out.println(t.num);这里输出的仍然是0x0011指向的是内容。所以就是输出的是5.


作者: 呵呵君    时间: 2015-7-5 20:12
samove 发表于 2015-7-5 19:53
这是一个很有意思的东东。
关键在于method方法调用,其实第一步:Test t = new Test(); 这个new Test()会 ...

流弊,真详细...关于内存这块就是搞不懂
作者: 鹰隼展翼    时间: 2015-7-5 22:40
method方法中没有返回值
作者: 122125241    时间: 2015-7-5 22:46
这个有点绕,不过好还是看方法是传形式参数还是实际参数,然后记住就近原则,  还有每New下就是个新的对象,指针对以前是没有影响的,就像String一样,他本身就是一个对象,值不会发生改变,我们使用它很可能就是新的一个String




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2