初始化基本类型数组

26

我想知道,

初始化基本数据类型数组的这两种方法究竟有什么区别:

int[] arr1 = new int[]{3,2,5,4,1};

int[] arr2 = {3,2,5,4,1};

哪一种更受推荐?


8
没什么区别。别把这些微小的细节看得太重要,把注意力放在更大的画面上! - Alex Lockwood
3
第二个问题是什么?第一个问题有何意义? - Dave Newton
7个回答

18

没有区别,它们产生的字节码完全相同。我认为可能是第二种形式在早期版本的Java中不被支持,但那已经是一段时间以前的事了。

既然如此,那就成为了一个风格问题,这是个人偏好的问题。既然你特别问了,更喜欢第二个,但是再次强调,这是个人口味的问题。


在旧版的Java中,如果我没记错的话,对于原始类型是需要使用"new"关键字的? - Jimmy Geers
@JimmyGeers:就是我说的。 :-) - T.J. Crowder
这个特性是在哪个版本中添加的? - reesjones
1
@reesjones:很久以前,任何稍微现代一点的东西都有它。 - T.J. Crowder

9

就像其他人提到的一样,它们是等效的,第二个选项更简洁。不幸的是,编译器并不总是能够理解第二个选项:

public int[] getNumbers() {
   return {1, 2, 3}; //illegal start of expression
}

在这种情况下,您需要使用完整语法:
public int[] getNumbers() {
   return new int[]{1, 2, 3};
}

7

这两种语句没有区别。个人而言,更偏向于第二种。因为在花括号中指定了所有元素。编译器会帮助计算数组的大小。

所以不需要在赋值运算符后添加 int[]


4
在您的情况下,这两种风格最终具有相同的效果,都是正确的,第二种更加简洁。但实际上,这两种风格是不同的。
请记住,在Java中,数组是固定长度的数据结构。一旦创建了数组,就必须指定其长度。
在未初始化的情况下,第一个案例为
int[] arr1 = new int[5];

第二种情况将是:
int[] arr2 = {0,0,0,0,0};

你看到区别了吗?在这种情况下,首选第一种样式,因为你不必手动输入所有默认初始值。
对我而言,这两种样式之间唯一的大区别是在创建没有显式初始化的数组时。

1
在这种情况下,选择第二种方式,因为它更美观简洁 :)

1

在这种情况下非常有用

void foo(int[] array) {

}

用字面量进行调用

// works
foo(new int[]{5, 7})

//illegal
foo({5, 7})

0

补充@Paul Bellora的答案,如果您正在尝试使用三元运算符初始化原始数组,则只有第二个选项有效。

int[] arr1 = false ? {} : {1,2}; // doesn't work
int[] arr2 = false ? new int[]{} : new int[]{1,2}; // works

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接