java作用域

来源:百度知道 编辑:UC知道 时间:2024/07/11 09:29:15
{
int x = 1;
{
x = 2;
}
System.out.println("x="+x);
}
请问输出的x是多少?
非常感谢二位 能不能再告诉我一下 x=2 是x重新指向了一个等于2的堆块 等于1的那个已经等着被回收了还是x的指向没变是堆中的1被替换成2?

int是原始数据类型,所以x变量不是放在堆区,而是放在栈区
所以当多次对x变量赋值的时候,实际上是对栈区中的这块内存反复填值,后面的赋值会覆盖前面的

如果是引用类型就不一样了,比如说Integer
Integer i;
i = new Integer(1);
i = new Integer(2);
这种情况下,i还是在栈区,但它只是一个引用,而后面的new出来的放在堆区,堆区里放着1和2.
i引用了了堆区中的一块内存,当第二次对i赋值的时候,存放1的那块堆还在,只是i的引用改成了第二个而已。

x=2

2