Java Null行为

前端之家收集整理的这篇文章主要介绍了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");
    }

}

产量

等于.

解决方法

if we assign null to any object what it actually is it some memory location in heap OR anything else.

应该区分参考和对象.您可以为引用分配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:\Users\Nikolay\workspace\TestNull\bin>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?

原文链接:https://www.f2er.com/java/126712.html

猜你在找的Java相关文章