数组初始化差异java

时间:2011-01-16 17:18:31

标签: java

以下两种数组初始化方法有什么区别:

  1. Object[] oArr = new Object[] {new Object(), new Object()};
  2. Object[] oArr = {new Object(), new Object()};
  3. 它与堆/堆栈分配有关吗?

    谢谢!

4 个答案:

答案 0 :(得分:19)

完全没有 - 他们只是表达同样事物的不同方式。

但是,第二种形式仅在变量声明中可用。例如,你不能写:

foo.someMethod({x, y});

但你可以写:

foo.someMethod(new SomeType[] { x, y });

Java语言规范的相关部分是10.6 - Array Initializers部分:

  

可以在声明中指定数组初始化程序,   或作为数组创建表达式(第15.10节)的一部分,创建一个数组并提供一些初始值:

答案 1 :(得分:2)

完全相同。第二个是第一个允许的速记(仅在此时,它作为变量声明的一部分完成。

答案 2 :(得分:1)

在Java中,所有对象都存在于堆中,因为数组是Java中的对象,它们位于堆栈中。

对于这两个结果没有区别,你将得到两个具有相同元素的数组对象。

但有时你会遇到一些你不能使用它们的情况,例如你不知道数组的元素。然后你会遇到这种形式:

Object [] array=new Object[size];

答案 3 :(得分:0)

还有一个小而引人注目的差异!

你可以做到

int[] arr;
arr= {1,2,3}; // Illegal

但你可以做得很好

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

此外,如果您要稍后进行初始化,则无法执行

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