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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2012-11-18 12:15  /  2857 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先看代码:
class Person
{
                int age;       
}
class TestPerson
{
                public static void main(String[] args)
                {
                                Person p = new Person();
                                new Person().age = 50;//用匿名对象给对象中的变量赋值
                                System.out.println(new Person().age);//打印出变量age的值       
                               
                                p.age = 30;
                                System.out.println(p.age);
                }       
}
为什么用匿名对象给对象中的成员变量赋值没有效果呢?打印结果还是0!!!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
new Person().age = 50;//
System.out.println(new Person().age);//你这里是两个不同的匿名对象

  

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Person p = new Person();
  new Person().age = 50;//他们是两个对象。在内存中是不同位置存在的,每当你 new .. 就重新创建一个新的对象。
System.out.println(new Person().age);//当你打印这个这个对象时,你又创建了一个对象,现在等于你创建了三个对象。他的值是默认初始化0。所以结果是0

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
哥们 你 new 了 两个对象吧   打印的不是同一个对象
回复 使用道具 举报
我来说一下我自己的观点吧:
感觉匿名对象只能用一次,用完之后就消失,或者说被垃圾回收机制回收。
new Person().age = 50;//用匿名对象给对象中的变量赋值
走到这一段,内存中的栈上有一个50
System.out.println(new Person().age);//打印出变量age的值        
走到这一上一段中Person()对象的引用就消失了,就不指向50了,而是另开辟了一块区域,所以age打印为0
说的有点笼统,可能不太对,这只是我自己的理解!                                

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 曹自祥 于 2012-11-18 12:37 编辑

                                 Person p = new Person();
                               new Person().age = 50;//用匿名对象给对象中的变量赋值
                                System.out.println(new Person().age);//打印出变量age的值   
你这里创建了3个不同的对象,青色标注的是命名对象,可以通过对象引用p来进行操作;
红色标注的是两个不同的匿名对象对象,你对第一个匿名对象属性赋值,没对第二个匿名对象赋值。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
曹自祥 发表于 2012-11-18 12:31
Person p = new Person();
                                new Person ...

C:\Documents and Settings\liutao\桌面
回复 使用道具 举报
张权 中级黑马 2012-11-18 12:53:06
8#
谢谢各位的回答,明白了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马