标题: 关于给对象的成员变量赋值问题 [打印本页] 作者: 张权 时间: 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的值
作者: 廖超超 时间: 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
谢谢各位的回答,明白了!!!