A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大手牵小手 中级黑马   /  2015-4-1 21:51  /  678 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
        }
}

16 个回复

倒序浏览
这个应该是匿名对象的引用后堆内存的释放,也就是t.num=6,在输出语句前就已经释放了。
回复 使用道具 举报
1)num是成员变量,也就是说每个对象里面都会有一个num
2)调用method方法的时候又new了一个Test对象出来,也就是说新的Test对象也有一个num,这个num=6
3)打印的时候,打印的是本身t对象的num,这个num=5
所以最后结果为5
回复 使用道具 举报
基本数据类型形式参数的改变,对实际参数没得影响
回复 使用道具 举报
Test t = new Test()  这句创建了一个Test对象.

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

System.out.println(t.num); 这里的t 是你第一次 创建的那个对象。  与 method()中的 t 没一点关系。  
我不太会描述,不知道你懂了没。
回复 使用道具 举报
基本数据类型形式参数的改变,对实际参数没得影响........................
回复 使用道具 举报
形参也是局部变量, 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;
        }
}
回复 使用道具 举报
这个是5,我也说不出为何呀,希望可以学习下
回复 使用道具 举报
因为new Test()是一个匿名对象,创建的新对象。
回复 使用道具 举报
methed(new Test())是在堆内存中创建的一个新对象,执行完methed方法之后就结束了;
而打印语句打印的是第一次new出来的t.num=5,所以会输出 5.
回复 使用道具 举报
    public static void method(Test t){
                t.num = 6; //这个用的new出的对象地址已经释放了,这里的t的地址跟main方法内的t的地址不一样
      
回复 使用道具 举报
都分析的蛮好的,多谢大家
回复 使用道具 举报
都分析的很好,同学习了。
回复 使用道具 举报
打印的是第一个对象t的num啊
回复 使用道具 举报
method(new Test());这里创建的是匿名对象 ,所以成员变量还是输出的是你赋给成员变量的值!
回复 使用道具 举报
method(new Test());     创建了新的对象
回复 使用道具 举报
匿名对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马