繁体   English   中英

初始化原语数组

[英]Initialize array of primitives

我想知道,

这两种初始化基元数组的方法之间究竟有什么区别:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM