例如:
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,而使堆内存成为垃圾?在这里面我存在这哪些错误的理解和不足?
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,而使堆内存成为垃圾?在这里面我存在这哪些错误的理解和不足?
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。