数组初始化差异java

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

  1. Object[] oArr = new Object[] {new Object(), new Object()};
  2. Object[] oArr = {new Object(), new Object()};

它与堆/堆栈分配有关吗?

谢谢!

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

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

 foo.someMethod({x, y}); 

但你可以写:

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

Java语言规范的相关部分是第10.6节- 数组初始化器 :

可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式(第15.10节)的一部分,创建数组并提供一些初始值:

绝对相同。 第二个是第一个允许的速记(只有当这里作为变量声明的一部分完成时)。

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

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

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

Object [] array=new Object[size];

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

你可以做

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

但你可以做得很好

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

此外,如果您要稍后进行初始化,则不能这样做

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