6

如果我构造:

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

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

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

4

6 回答 6

14

是的,新数组中的字段是用nullJava 初始化的。

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

如果您有长度很短的数组,并且您静态知道要放置什么,则可以使用数组初始化器

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

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

顺便说一句,原始类型的数组。使用 0 和false布尔数组的各种变体进行初始化(只要您不使用初始化程序)。数组初始化的规则与字段的初始化相同,可以Java 语言规范中找到。

于 2013-02-17T11:12:13.800 回答
9

现有的答案都是正确的,但是在您的特定示例中需要添加一点。尽管引用数组默认为空,但多维数组隐含地创建了第一个维度。

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

Object[][] guy = new Object[5][4];
System.out.println(guy[0]);
--> Output will be [Ljava.lang.Object;@5e743399
于 2013-02-17T11:19:25.823 回答
1

所有变量/字段都在 Java 中初始化。

咨询http://docs.oracle.com/javase/specs/

于 2013-02-17T11:12:36.630 回答
1

在 Java 中,对象初始化采用默认值“null”。

于 2013-02-17T11:13:14.867 回答
1

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

尝试运行代码片段,看看会发生什么 public class 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
0 0 0 0 0 0 0 0
0 0 0 0 0 0
0 0
0 0 0 0

于 2013-02-17T11:16:42.883 回答
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'}};
于 2013-02-17T11:14:58.123 回答