数组初始化差异java
以下两种数组初始化方法有什么区别:
Object[] oArr = new Object[] {new Object(), new Object()};
-
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