在声明对象为null之后将值赋给member-variable时出错

Avi*_*i C 0 java object nullpointerexception

我是Java的新手并且在以下情况下遇到错误:

markerObj = null;
markerObj.sections = RowData[1];
Run Code Online (Sandbox Code Playgroud)

但是,删除第一行后,它工作正常.有什么问题?

Gui*_*ume 5

变量名只是引用.它们指向包含对象的内存(在堆中)中的空间.

当你这样做时MyObj myObject = new MyObj();,它会做两件事:在内存中创建对象,并将myObject引用指向它.所以当你这样做时myObject.sections,它会跟随引用,并在内存中检查对象的部分.

然后当你这样做时myObject = null,你基本上会破坏你的引用和你在内存中的对象之间的联系.因此,在做的时候myObject.sections,Java不能再遵循引用了,因为它没有指向任何东西.所以它抛出一个NullPointerException

请注意,对象本身不会被销毁myObject = null,只有引用无效.然后,垃圾收集器会检测到您的对象无法访问(如果没有其他引用)并回收内存,则会破坏该对象.