Java Null行为
|
我正在努力了解 Java中的null是如何工作的. 如果我们为任何对象分配null,那么场景后面会发生什么?它是否分配指向空“对象”或其他内容的内存位置地址? 我已经尝试了以下程序,我已经明白,所有的null指向相同的位置. 但是有人可以告诉我Java如何引发NullPointerException和Java中的null如何工作? class Animal{
}
class Dog{
}
public class testItClass {
public static void main(String args[]){
Animal animal=null;
Dog dog=null;
if(((Object)dog) == ((Object)animal))
System.out.println("Equal");
}
}
产量 等于. 解决方法
应该区分参考和对象.您可以为引用分配null. A a = new A(); 类型为A的对象在堆中创建.你被给予参考a.如果现在你分配 a = null; 对象本身仍然驻留在堆中,但是您将无法使用引用a访问它. 请注意,对象可能稍后垃圾回收. UPD: 我已经创建了这个类来看它的字节码(第一次给我): public class NullTest {
public static void main (String[] args) {
Object o = new Object();
o = null;
o.notifyAll();
}
}
它产生: C:UsersNikolayworkspaceTestNullbin>javap -c NullTest.class
Compiled from "NullTest.java"
public class NullTest {
public NullTest();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #3 // class java/lang/Object
3: dup
4: invokespecial #8 // Method java/lang/Object."<init>":()V
7: astore_1
8: aconst_null
9: astore_1
10: aload_1
11: invokevirtual #16 // Method java/lang/Object.notifyAll:()V
14: return
}
你可以看到设置为null给引用结果: 8: aconst_null 9: astore_1 List of byte code instructions 基本上它把值的值放到堆栈顶部,然后保存到引用.但这种机制和参考实现是JVM内部的. How is reference to java object is implemented? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
