2

間に違いはありますか?

String x = getString();
doSomething(x);

対。

doSomething(getString());

リソースとパフォーマンスの面で、特にそれはループ内で数十回、数百回、または数千回実行されますか?

4

5 に答える 5

7

同じオーバーヘッドがあります。ローカル変数はあなたの生活を楽にするためだけにあります。VMレベルでは、それらは必ずしも存在する必要はなく、マシンコードが実行されたときに存在しないことは確かです。

したがって、ここで心配する必要があるのはgetString()、それが潜在的に高価であるかどうかです。xまったく効果がない可能性が非常に高いです。

于 2012-05-30T05:37:50.677 に答える
1

最初に、あなたの最優先の目標は、ほとんどの場合、コードの可読性を維持することであるべきだと言うことから始めましょう。あなたのコンパイラは、ほとんどの場合、あなたよりも些細な最適化に優れています。信頼してください!

特定の例に応じて、各例で生成されるバイトコードは異なります。ただし、Integer.MAX_VALUEの反復でのループでは、2つのアプローチの間に統計的に有意な、または一貫した違いがなかったため、大きな違いは見られませんでした。

于 2012-05-30T05:47:32.840 に答える
0

コンパイル時には両方とも同じだと思いますが、場合によっては最初の方がコードを読みやすくなる可能性があります。

于 2012-05-30T05:39:26.113 に答える
0

両方のステートメントは同じです。唯一の違いは、最初のアプローチではローカル変数Xを使用したことです。これは、2番目の構文を使用して回避できます。

于 2012-05-30T05:39:37.773 に答える
0

それは主にユースケースに依存します。その正確な文字列を使用してdoSomethingを繰り返し呼び出しますか?次に、ローカル変数を使用する方が少し効率的です。ただし、単一の呼び出しまたは異なる文字列を使用した複数の呼び出しの場合は、違いはありません。

于 2012-05-30T05:45:23.703 に答える