我想知道,
这两种初始化基元数组的方法之间的区别是什么:
int[] arr1 = new int[]{3,2,5,4,1};
int[] arr2 = {3,2,5,4,1};
哪一个更受欢迎?
答案 0 :(得分:15)
没有,它们产生完全相同的字节码。我认为可能是旧版本的Java不支持第二种形式,但这可能是一段时间了。
在这种情况下,它成为一种风格问题,这是个人喜好的问题。由于您特别询问, 我 更喜欢第二种,但再次,这是个人品味的问题。
答案 1 :(得分:7)
这两个陈述之间没有区别。 就个人而言,第二个是首选。因为您拥有大括号中指定的所有元素。编译器将帮助您计算数组的大小。
因此无需在赋值运算符后添加int[]
。
答案 2 :(得分:7)
正如其他人所说,它们是等价的,第二种选择不那么冗长。不幸的是,编译器始终无法理解第二个选项:
public int[] getNumbers() {
return {1, 2, 3}; //illegal start of expression
}
在这种情况下,您必须使用完整语法:
public int[] getNumbers() {
return new int[]{1, 2, 3};
}
答案 3 :(得分:4)
在你的情况下,这两种风格最终效果相同,都是正确的,第二种更简洁。但实际上这两种风格是不同的。
记住java中的数组是固定长度的数据结构。创建数组后,必须指定长度。
没有初始化,第一种情况是
int[] arr1 = new int[5];
第二种情况是
int[] arr2 = {0,0,0,0,0};
你看到了区别吗?在这种情况下,首选样式是首选样式,因为您不必手动键入所有这些默认初始值。
对我而言,两种样式之间唯一的重大区别是在没有显式初始化的情况下创建数组。
答案 4 :(得分:1)
在这种情况下,第二个因为它更漂亮而且更简洁:)
答案 5 :(得分:1)
在这种情况下很有用
void foo(int[] array) {
}
用文字调用
// works
foo(new int[]{5, 7})
//illegal
foo({5, 7})
答案 6 :(得分:0)
添加到@Paul Bellora 的答案中,如果您尝试使用三元运算符初始化原始数组,则只有第二个选项有效
int[] arr1 = false ? {} : {1,2}; // doesn't work
int[] arr2 = false ? new int[]{} : new int[]{1,2}; // works