Java:对象数组;本地和类级实例之间有什么区别?

时间:2012-06-02 12:46:43

标签: java arrays object initialization default-value

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

在一些SCJP笔记中阅读:

  

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

     

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

4 个答案:

答案 0 :(得分: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
    }
}

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

现在,这是阵列本身。在谈到数组的实际元素时,默认情况下它们为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
    }
}

答案 1 :(得分:2)

未初始化的对象始终为null

Object[] myArray;
//myArray == null

myArray = new Object[1];
//myArray[0] == null

答案 2 :(得分:1)

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

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

答案 3 :(得分: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();