我是Java的新手并且在以下情况下遇到错误:
markerObj = null;
markerObj.sections = RowData[1];
但是,删除第一行后,它工作正常。 有什么问题?
答案 0 :(得分:5)
变量名只是引用。它们指向内存中(在堆中)包含对象的空间。
执行MyObj myObject = new MyObj();
时,它会做两件事:在内存中创建对象,并将myObject引用指向它。
因此,当您执行myObject.sections
时,它会跟随引用,并在内存中检查对象的各个部分。
然后当你执行myObject = null
时,你基本上会破坏你的引用和你在内存中的对象之间的联系。因此,在执行myObject.sections
时,Java不再遵循引用,因为它不指向任何内容。所以它会抛出一个NullPointerException
请注意,myObject = null
对象本身不,只有引用无效。垃圾收集器然后检测到您的对象无法访问(如果没有其他引用)并回收内存,则销毁该对象。
答案 1 :(得分:2)
这正是它应该做的
通过将null
分配给变量,您可以明确声明它不再绑定到实例。
因此,当您在代码中引用sections
时,您会引用不存在的实例的sections
成员。
答案 2 :(得分:2)
问题是,一旦你说markerObj = null
它将内存指向null,即它不会启动任何内存对象。所以你得到一个空指针错误。
顺便说一句,如果你试图将其值实例化为null,那么尝试将其内部数据属性赋予null,例如。 TextView.setText(null);
对于您正在使用的课程,可能会有所不同。请查看developer.android.com。
答案 3 :(得分:0)
您正在尝试访问null对象的成员..这就是问题..
如果你想要一个新的实例.. 然后做以下..
markerObj = new objectClassName();
答案 4 :(得分:0)
您可以为marketObj
引用的对象字段指定值。但是,由于markerObj
未引用任何对象(它设置为null
),因此无法进行赋值,您将获得NullPointerException。如果您不希望显示异常,则应首先将对象分配给marketObj
。
答案 5 :(得分:0)
如果将对象标记为null,则无法为其成员变量赋值。