Java中的对象数组是否具有默认值?

时间:2013-02-17 11:10:26

标签: java arrays

如果我构建:

Object[][] guy = new Object[5][4];

我的数组中的斑点是否有默认值?它们是空的吗?

有没有办法为数组中的每个点分配默认值?

6 个答案:

答案 0 :(得分:9)

是的,新数组中的字段在Java中初始化为null。

您可以使用方法Arrays.fill()来填充具有特定值的数组中的所有字段。

如果你有一个短长度的数组,你静态地知道放什么,你可以使用array initializers

Object[][] guy = { { obj1, obj2, null, obj3 }, { ... }, ... };

您必须输入包含所有字段的完整数组(在您的情况下为20),因此如果您想在每个地方放置相同的值,fill()可能更方便。

原始类型的数组btw。使用0的各种变体初始化,并使用false初始化布尔数组(只要您不使用初始化程序)。数组初始化的规则与字段初始化的规则相同,可以在Java语言规范中找到here

答案 1 :(得分:8)

现有答案都是正确的,但在您的特定示例中有一点要添加。虽然引用数组默认为null,但多维数组具有隐含创建的第一维。

例如,在您的情况下,第一个维度不为null,但实际上将指向另一个数组:

Object[][] guy = new Object[5][4];
System.out.println(guy[0]);
--> Output will be [Ljava.lang.Object;@5e743399

答案 2 :(得分:1)

答案 3 :(得分:1)

在Java中,对象初始化假定默认值为“null”。

答案 4 :(得分:1)

原始类型按默认值初始化,引用类型未初始化(因此它们为空)

尝试运行代码段以查看会发生什么 公共类ArraysSample {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Object[][] objAr = new Object[4][5];
    for (Object[] objects : objAr) {
        for (Object object : objects) {
            System.out.print(object + "\t");
        }
        System.out.println();
    }

    int[][] primitievArray = new int[4][5];
    for (int[] is : primitievArray) {
        for (int i : is) {
            System.out.print(i + "\t");
        }
        System.out.println();
    }

}

}


null null null null null null null null null null null null null null null null null null null null 0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

答案 5 :(得分:0)

是的,您可以进行默认分配,例如:

而不是:

char[][] c = new char[5][4];
你可以:

char[][] c = {{'a','b','c','x','B'}, {'A','Z','w','Z','S'},
{'A','Z','w','Z','S'},{'A','Z','w','Z','S'}};