代码之家  ›  专栏  ›  技术社区  ›  Student

在Java中,null是堆上现有的对象吗?

  •  3
  • Student  · 技术社区  · 14 年前

    在Java中,是 无效的 堆上的现有对象?

    5 回复  |  直到 14 年前
        1
  •  7
  •   Matt Ball    12 年前

    请看这里:

    Java室内空气品质: Is null an Object?

        2
  •  3
  •   Steven Sudit    14 年前

        3
  •  3
  •   trashgod    14 年前

    这个问题突出了 scope definite assignment . 如果在调试器中单步执行以下代码,则在每行中断时可以看到几个功能:

    1. 不可能有断点; i
    2. 在范围内,但“不是当前上下文中的已知变量”
    3. 已分配,并且它具有 null .
    4. 参考文献

    列表:

    Integer i;
    i = null;
    i = Integer.valueOf(1);
    i++;
    

    附录:

    那么,null和未初始化有什么区别呢?

    定赋值 ,局部变量的值不可访问;任何访问该值的尝试都将在编译时被拒绝。一旦指定了一个定值,甚至 无效的 ,可以访问该值。这是Java中的一个关键安全特性。在某些语言中 uninitialized variable

    附录:a的内容 frame's local variables 未指定初始化之前。这个 bytecode verifier deviant bytecode 是可能的。

        4
  •  0
  •   irreputable    14 年前

    尚未赋值的局部变量可能也指向null。我不是JVM专家,但这似乎是合乎逻辑的选择。

    所以编译器会检查您是否为变量赋值。除此之外没有区别。在运行时,尚未初始化的局部变量被分配为null。

        5
  •  0
  •   chubbsondubs    14 年前

    Null不是对象。事实上,它与对象相反,这就是为什么不能对指向null的引用进行方法调用。如果你真的必须知道null是什么,你可以把它看作是一个类似于零的东西。事实上,指向null的引用不再占用内存,即零。它没有值,所以它是一个引用,不引用任何对象。

    在Java中,必须先初始化变量,然后才能使用它。由于历史的原因,Java不希望您假定值,因此编译器会强制您为它赋值。造成这种情况的部分原因是C导致的错误和安全问题,因为它没有在值被使用之前初始化或强制您这样做。Java确实为原语和实例变量初始化了一些值:0、0.0、false和null等,但是对于局部变量,必须给它一个值。这是为了保护你自己。:-)