【问题标题】:Java Object Reference Array InitializationJava 对象引用数组初始化
【发布时间】:2021-03-30 09:25:27
【问题描述】:

在java中,数组初始化中的对象引用是如何工作的?

例如,这很好用:

SomeObject object1;
SomeObject object2;

// ***

object1 = new SomeObject();
object2 = new SomeObject();

SomeObject[] objects = {object1, object2};

// processing objects

但是,如果我将数组初始化放在“***”标记处,我稍后会在处理数组元素时收到 NullPointerException。为什么?数组已经包含对象引用,为什么我在初始化数组之前或之后初始化所述对象?

【问题讨论】:

  • 当您说SomeObject[] objects = {object1, object2}; 时,您是在说objects[0] 与object1 指向同一个Object。如果 object1 为 null,则即使您稍后更改 object1,objects[0] 也为 null。

标签: java arrays oop


【解决方案1】:

数组已经包含对象引用,为什么我在初始化数组之前或之后初始化所述对象?

调用SomeObject[] objects = {object1, object2}; 时,您将获得一个数组,其元素被分配了object1object2。请注意,在 Java 中,引用只是地址的值,即当您在 分配之前访问 object1 时,该引用的值仍然是 null

这就是为什么在初始化引用之前构建数组时会在数组中得到空元素的原因。

【讨论】:

  • 哦,我明白了!那么,如果我像问题中那样初始化数组,然后说“object1 = object2”,objects[0] 仍然会指向任何 object1 曾经是的,对吧?
  • @BadgerMole 完全正确。 object1 = ... 仅更改 object1 并没有别的。
【解决方案2】:

*** 处,object1object2 已声明,但尚未分配。在 Java 中,这意味着它们都是 null。

因此,当您使用它们创建数组时,您实际上是在这样做:

SomeObject[] objects = { null, null };

稍后当您处理数组的元素时,您会得到一个NullPointerException,因为您已经在数组中存储了nulls。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多