如果我构建:
Object[][] guy = new Object[5][4];
我的数组中的斑点是否有默认值?它们是空的吗?
有没有办法为数组中的每个点分配默认值?
答案 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'}};