在Java中初始化int数组时,编译器是否添加了新的int []?

时间:2014-09-18 00:41:13

标签: java

两者有什么区别?第一个实际上是否已转换为第二个?

int [] ar = {1,2,3,4};
and
int [] ar = new int[]{1,2,3,4};

3 个答案:

答案 0 :(得分:3)

正如其他答案已经指出的那样,

的影响
int[] arr = {1, 2, 3, 4};

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

完全相同。

在这个答案中,我只会详细说明何时使用哪一个。

第一个显然不太适合打字,所以尽可能使用它。但是,它只能在直接分配给变量时使用。有时,我们想要创建一个数组而不分配变量。这称为匿名数组。在这种情况下,我们需要使用第二种语法。

head({1, 2, 3, 4});  // error
head(new int[]{1, 2, 3, 4});  // ok

return {1, 2, 3, 4};  // error
return new int[]{1, 2, 3, 4};  // ok

new的存在与否只是语言上的。在C ++中,不像在堆上或堆栈上创建数组。在Java中,任何非基本对象都会进入堆。

答案 1 :(得分:2)

int [] ar = new {1,2,3,4};无法编译。

如果您的意思是int [] ar = {1,2,3,4};,那么是 - 它与int [] ar = new int[]{1,2,3,4};相同。

答案 2 :(得分:2)

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

会给你一个编译错误,我认为你的意思是:

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

在这种情况下,答案是肯定的。这是java在声明数组时的简写。