黑马程序员技术交流社区

标题: 关于给对象的成员变量赋值问题 [打印本页]

作者: 张权    时间: 2012-11-18 12:15
标题: 关于给对象的成员变量赋值问题
先看代码:
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!!!
作者: 种生祥    时间: 2012-11-18 12:21
new Person().age = 50;//
System.out.println(new Person().age);//你这里是两个不同的匿名对象

  
作者: 廖超超    时间: 2012-11-18 12:23
Person p = new Person();
  new Person().age = 50;//他们是两个对象。在内存中是不同位置存在的,每当你 new .. 就重新创建一个新的对象。
System.out.println(new Person().age);//当你打印这个这个对象时,你又创建了一个对象,现在等于你创建了三个对象。他的值是默认初始化0。所以结果是0
作者: 班志国    时间: 2012-11-18 12:23
哥们 你 new 了 两个对象吧   打印的不是同一个对象
作者: y510662669    时间: 2012-11-18 12:31
我来说一下我自己的观点吧:
感觉匿名对象只能用一次,用完之后就消失,或者说被垃圾回收机制回收。
new Person().age = 50;//用匿名对象给对象中的变量赋值
走到这一段,内存中的栈上有一个50
System.out.println(new Person().age);//打印出变量age的值        
走到这一上一段中Person()对象的引用就消失了,就不指向50了,而是另开辟了一块区域,所以age打印为0
说的有点笼统,可能不太对,这只是我自己的理解!                                

作者: ssx0101    时间: 2012-11-18 12:31
本帖最后由 曹自祥 于 2012-11-18 12:37 编辑

                                 Person p = new Person();
                               new Person().age = 50;//用匿名对象给对象中的变量赋值
                                System.out.println(new Person().age);//打印出变量age的值   
你这里创建了3个不同的对象,青色标注的是命名对象,可以通过对象引用p来进行操作;
红色标注的是两个不同的匿名对象对象,你对第一个匿名对象属性赋值,没对第二个匿名对象赋值。
作者: 凊係柈泩    时间: 2012-11-18 12:47
曹自祥 发表于 2012-11-18 12:31
Person p = new Person();
                                new Person ...

C:\Documents and Settings\liutao\桌面
作者: 张权    时间: 2012-11-18 12:53
谢谢各位的回答,明白了!!!




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