1

Java の同じメソッドへの次の 2 つの呼び出しを考えてみましょう:-

1)doSomething(new Object[]{"something"}) ;

2)

Object[] obj = {"something"} ;

doSomething(obj);

メモリ効率と時間効率の点でどちらが効率的ですか? 1) の方がメモリ効率と時間効率の両方で優れていると思います。2 番目のオプションの理由は、別の変数を作成し (余分なメモリ)、その値を変数に代入する必要がある (余分な時間)。コメントはありますか?

オブジェクトが一度だけ作成されることを明確にするために、新しく作成されたオブジェクトのアドレスを保持するために使用される追加の変数について話しています。

4

3 に答える 3

4

どちらも時間とメモリの点では同じです。余分な割り当ては、コンパイラによって最適化されて取り除かれます。

違いは、2 番目のバージョンでは、変数に便利な名前を付ける機会が与えられることです。これにより、コードがより明確になります。

于 2013-01-14T10:08:23.567 に答える
2

2 番目の呼び出しでは、呼び出し元のメソッドでオブジェクトを再利用できますが、最初の呼び出しではできません。

とにかく渡されたオブジェクトが作成されるため、メモリに影響はありません。

于 2013-01-14T10:08:36.987 に答える
1

何がより単純で明確であるかを最初に常に検討する必要があります。プロファイラーまたはマイクロベンチマークで測定したため、問題があることがわかっている場合にのみパフォーマンスを検討する必要があります。

最良のオプションは、varargsを使用することである可能性があります

doSomething("something");

void doSomething(String... args) { }

注:これは最も単純であるだけでなく、JITがString[]作成されたものを排除できるため、潜在的に最速です。

于 2013-01-14T10:11:03.427 に答える