2016-06-15 4 views
0

は、次のコードを考えてみましょう:可変配列の作成は遅延ですか?

void someMethod(Object... varargParam){ 
    if(someCondition){ 
     doSomethingWith(varargParam); 
    } 
} 

someConditionfalseに解決された場合、varargParamが未使用です。 Object arrayがまだ作成されるのですか、またはこの作成は最初の使用時にポストフォンされますか?

+2

アレイはコールサイトで作成されます。 –

+0

関数をインライン展開した後、実行時に割り当てが消えるかもしれませんが、それは言語による保証ではなく、一部のJITによって行われる最適化です。 – the8472

答えて

0

varargParam呼び出しが発生したときに、メソッド自体で使用されていない場合でも作成されます。 JLS 15.14.2から

呼び出されるメソッドは、変数アリティメソッドMがある場合、それは必ずしもn> 0の仮パラメータを有しています。 mの最終的な仮パラメータは、ある種のTに対しては必ず型T []を持ち、mは必然的にk≥0の実引数式で呼び出される。

関連する問題