黑马程序员技术交流社区

标题: 不懂这个结果为什么是5 [打印本页]

作者: 大手牵小手    时间: 2015-4-1 21:51
标题: 不懂这个结果为什么是5
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;
        }
}


作者: showdy    时间: 2015-4-1 22:02
这个应该是匿名对象的引用后堆内存的释放,也就是t.num=6,在输出语句前就已经释放了。
作者: 黑色救护车    时间: 2015-4-1 22:03
1)num是成员变量,也就是说每个对象里面都会有一个num
2)调用method方法的时候又new了一个Test对象出来,也就是说新的Test对象也有一个num,这个num=6
3)打印的时候,打印的是本身t对象的num,这个num=5
所以最后结果为5
作者: ym199210    时间: 2015-4-1 22:25
基本数据类型形式参数的改变,对实际参数没得影响
作者: lvheqiang    时间: 2015-4-1 22:27
Test t = new Test()  这句创建了一个Test对象.

method() 中的  t 指向的是 method(new Test()) 这句创建的匿名对象, 是另外一个Test对象。

System.out.println(t.num); 这里的t 是你第一次 创建的那个对象。  与 method()中的 t 没一点关系。  
我不太会描述,不知道你懂了没。
作者: 初夜告白    时间: 2015-4-1 22:38
基本数据类型形式参数的改变,对实际参数没得影响........................
作者: 耳东君    时间: 2015-4-1 22:44
形参也是局部变量, method(new Test()) 带入匿名对象到method方法后执行了t.num = 6;就被释放了,所以System.out.println(t.num);打印的是 Test t = new Test();这个对象中的num

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;
        }
}
作者: 466273082    时间: 2015-4-1 23:15
这个是5,我也说不出为何呀,希望可以学习下
作者: ㏒假™面具    时间: 2015-4-2 16:00
因为new Test()是一个匿名对象,创建的新对象。
作者: 田晓莉    时间: 2015-4-2 19:29
methed(new Test())是在堆内存中创建的一个新对象,执行完methed方法之后就结束了;
而打印语句打印的是第一次new出来的t.num=5,所以会输出 5.
作者: 徐顺醒    时间: 2015-4-2 19:42
    public static void method(Test t){
                t.num = 6; //这个用的new出的对象地址已经释放了,这里的t的地址跟main方法内的t的地址不一样
      
作者: lf027    时间: 2015-4-2 20:09
都分析的蛮好的,多谢大家
作者: 百思不得解    时间: 2015-4-2 20:43
都分析的很好,同学习了。
作者: hbk000    时间: 2015-4-2 20:45
打印的是第一个对象t的num啊
作者: 呐拽    时间: 2015-4-2 22:02
method(new Test());这里创建的是匿名对象 ,所以成员变量还是输出的是你赋给成员变量的值!
作者: m-勇敢的心    时间: 2015-4-2 23:04
method(new Test());     创建了新的对象
作者: 倒骑驴走着瞧    时间: 2015-4-2 23:13
匿名对象




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