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