小弟刚开始学java,碰到一个垃圾回收的疑问
int x[];
x=new int[100];
x[0]=1;
x=null;
这时如果用System.out.println(x)打印的话,会报空指针的错误,说明到这里x应该被回收了,可是如果再加一句
x=new int[2];
编译器却能通过。x不是被回收了吗?不是应该报x变量未定义的错误吗?为什么会发生这种情况?
int x[];
x=new int[100];
x[0]=1;
x=null;
这时如果用System.out.println(x)打印的话,会报空指针的错误,说明到这里x应该被回收了,可是如果再加一句
x=new int[2];
编译器却能通过。x不是被回收了吗?不是应该报x变量未定义的错误吗?为什么会发生这种情况?
x=new int[100];
x[0]=1;
x=null; System.out.println(x)语句并不会报错啊。
此时只有用x里的对象是才会报错。
如:System.out.println(x[0]);
x=new int[100];创建一个内存块,让指针指向这里
x[0]=1;对那个内存块内容赋值
x=null; 指针指向null(不指向任何地方),那个创建的内存块由于没有引用(没任何指针指着它),所以可能会被垃圾回收机制回收掉,也可能不会被回收——jvm的定义,并没有要求垃圾回收机制一定做什么。