我想知道,
初始化基本数据类型数组的这两种方法究竟有什么区别:
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[]
。
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