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? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |