-3

就初始/默认/未初始化值而言...
...数组对象是否已初始化(在类和本地级别)?

在一些 SCJP 笔记中阅读它:

无论数组是声明为实例还是局部变量,数组元素都会被赋予其默认值。

但是,如果在本地声明数组“对象”,则不会对其进行初始化。

4

4 回答 4

3

作为引用类型的类成员的初始值为 null。

作为引用类型的局部变量被认为是单元化的,需要明确分配 null 或其他内容,否则代码将无法编译。

尝试测试这个例子,看看会发生什么:

class Test {
    private Object[] member;

    public void foo() {
        member.toString(); // NullPointerException
        Object[] local;
        local.toString(); // won't compile: The local variable local may not have been initialized
    }
}

对象数组遵循相同的规则,因为它们本身就是引用。

现在,这是针对数组本身的。在谈到array 的实际元素时,无论您在哪里声明它们,它们默认为 null:

class Test {
    private Object[] member = new Object[10];

    public void foo() {
        member[0].toString(); // NullPointerException
        Object[] local = new Object[10];
        local[0].toString(); // NullPointerException
    }
}
于 2012-06-02T12:51:56.787 回答
2

未初始化的对象总是null.

Object[] myArray;
//myArray == null

myArray = new Object[1];
//myArray[0] == null
于 2012-06-02T12:50:05.307 回答
1

声明为字段的数组初始化为 null,就像每个非原始实例变量一样。声明为局部变量的数组未初始化,与其他所有局部变量一样。

一旦初始化为一个新数组,它们的每个元素都包含 null。

于 2012-06-02T12:49:55.867 回答
1

1.In JAVA local variable have to intitialized before using it.

2. String s[] = new String[2];
Here s[0] and s[1] both contains NULL value and initialize s[0] and s[1] as:
s[0] = new String();
s[1] = new String();
于 2012-06-02T13:09:46.530 回答