以下两种数组初始化方法有什么区别:
Object[] oArr = new Object[] {new Object(), new Object()};
Object[] oArr = {new Object(), new Object()};
它与堆/堆栈分配有关吗?
谢谢!
答案 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