例如:
class Person
{
    int age;
    void shout()
    {
       System.out.println("oh,my god! my age is " + age);
     }
}class TestPerson
{
    Public static void main(String[] args)
      {
         Person p1 = new Person();
         Person p2 = new Person();
         p1.age = -30;
         p1.shout();
         p2.shout();
       }
}
我不明白的是,-30是后来赋值给p1的。也就是说,-30原本不是age的堆内存的。那么-30是先赋值p1的还是先赋值堆内存里的age?
还有如果这里的p1.age = null;的话,是age也会被赋值null,使得堆内存无效?还是p1指向了null,而使堆内存成为垃圾?在这里面我存在这哪些错误的理解和不足?

解决方案 »

  1.   

            Person p1 = new Person();    //创建Person的实例对象p1
            Person p2 = new Person();    //创建Person的实例对象p2
            p1.age = -30;    //这是一个赋值操作
            p1.shout();      //调用p1对象的shout();      
            p2.shout();      //调用p2对象的shout();   当你进行这句代码Person p1 = new Person()的时候,他就会在内存的堆里给你分配一块空间,然后在在栈里面分配一块空间,然后用栈的地址指向堆,这称为引用。
    p1.age = -30; 是在堆里存放的这里p1.age = null是错误的,age是int类型的,不能为null。