如果我构造:
Object[][] guy = new Object[5][4];
我的数组中的点有默认值吗?它们是空的吗?
有没有办法为数组中的每个点分配默认值?
是的,新数组中的字段是用null
Java 初始化的。
您可以使用该方法Arrays.fill()
用特定值填充数组中的所有字段。
如果您有长度很短的数组,并且您静态知道要放置什么,则可以使用数组初始化器:
Object[][] guy = { { obj1, obj2, null, obj3 }, { ... }, ... };
为此,您必须输入包含所有字段(在您的情况下为 20)的完整数组,因此如果您想在每个地方放置相同的值,fill()
可能更方便。
顺便说一句,原始类型的数组。使用 0 和false
布尔数组的各种变体进行初始化(只要您不使用初始化程序)。数组初始化的规则与字段的初始化相同,可以在Java 语言规范中找到。
现有的答案都是正确的,但是在您的特定示例中需要添加一点。尽管引用数组默认为空,但多维数组隐含地创建了第一个维度。
例如,在您的情况下,第一个维度不会为空,但实际上会指向另一个数组:
Object[][] guy = new Object[5][4];
System.out.println(guy[0]);
--> Output will be [Ljava.lang.Object;@5e743399
在 Java 中,对象初始化采用默认值“null”。
原始类型由默认值初始化,引用类型未初始化(因此它们为空)
尝试运行代码片段,看看会发生什么 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
是的,您可以进行默认分配,例如:
代替:
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'}};