加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Null行为

发布时间:2020-12-15 00:09:21 所属栏目:Java 来源:网络整理
导读:我正在努力了解 Java中的null是如何工作的. 如果我们为任何对象分配null,那么场景后面会发生什么?它是否分配指向空“对象”或其他内容的内存位置地址? 我已经尝试了以下程序,我已经明白,所有的null指向相同的位置. 但是有人可以告诉我Java如何引发NullPoin
我正在努力了解 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: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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读