2011-01-16 7 views
10

配列の初期化の2次の方法の違いは何ですか:アレイの初期化の違いのJava

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

は、それがヒープ/スタック割り当てに関連していますか?

ありがとうございます!

+8

」何の違いを行うことはできません後に初期化するのであれば、あなたは非常によく

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

も行うことができます。 –

+0

"時期尚早の最適化はすべての悪の根源です" – gulbrandr

+2

@gulbrandr、関連性? – davin

答えて

18

全くありません - 同じことを表現するのはちょっと違った方法です。

第2の形式は、変数宣言でのみ使用できます。たとえば、あなたが書き込むことはできません。

foo.someMethod({x, y}); 

ができますが、書き込むことができます。

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

Java言語仕様の該当ビットがセクション10.6 - Array Initializers次のとおりです。

配列初期化子かもしれません の宣言で指定するか、配列作成式(15.10)の一部として配列を作成し、いくつかのinit値:

+0

@gasan:はい、それは配列作成式の一部です...私の答えの中で何が起こるのか分かりません。 –

2

絶対に同じです。

1

Javaでは、配列はJavaのオブジェクトであるため、Javaではすべてのオブジェクトがヒープに存在し、スタック内に存在します。結果に差がないこれら二つため

、あなたは「同じ要素を持つ2つの配列オブジェクトを得たでしょ。

をしかし、時には、あなたがそれらを使用することはできませんいくつかの状況が発生します、例えばあなたがドン」配列の要素を知っていれば、この形式に固執するでしょう:

Object [] array=new Object[size];

0

まだまだ小さくてキャッチーな違いがあります。

あなたは

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

を行うことができますしかし、あなたは、あなたがそこ

int arr; 
arr = new [] {1,2,3} //Illegal 
関連する問題