3

かなり頻繁に呼び出されるメソッド内の変数をメモリが初期化しても問題ありませんか? 基本的に、このメソッドの例は次のとおりです。

int amount;
private boolean method() {
    amount = Random.nextInt(0, 100);
    return amount == 50;
}

この方法に対するメモリ効率の点では、多かれ少なかれ同じです。

private boolean method() {
    int amount = Random.nextInt(0, 100);
    return amount == 50;
}

ええ、これらは最良の例ではなく、冗長性があることはわかっています。申し訳ありません。

とにかく、事前に感謝します。

4

5 に答える 5

8

効率の違いがあったとしても、まったく無関係である可能性が非常に高いです。amountメソッドの外部で表示する必要がない場合は、不要な副作用がなく、スレッドセーフであるため、2 番目のバージョンを優先してください。

最後の点をさらに詳しく説明すると、複数のスレッドがmethod()同じオブジェクトを呼び出す場合、最初のバージョンは競合状態に陥ります。

于 2013-04-21T12:46:36.060 に答える
1

他の方法で使用する必要がない場合は、2 番目の方法が適しています。メソッド内の変数がスタックに割り当てられているため、パフォーマンスは問題になりません。これは非常に高速です。

ただし、特定のケースでは、このアプローチの方が優れており、優れた IDE では次のように提案されます。

private boolean method() {    
    return Random.nextInt(0, 100) == 50;
}
于 2013-04-21T12:49:35.770 に答える
0

同時アクセスによるエラーが心配されるほど、メモリ効率について心配する必要はありません。

    return amount == 50;

このクラスが複数のインスタンスで使用される場合、インスタンス変数amountは異なる場合があります。適切なメモリバリアがなければ、これは誤った結果につながります。int がローカル変数の場合、メソッドが完了するとスコープ外になります。

そういえば、なぜここで変数が必要なのですか? これでうまくいきませんか?

return Random.nextInt(0, 100) == 50;
于 2013-04-21T12:48:01.567 に答える
0

ローカル変数はメソッドの内部にあります。各変数のスコープをできるだけ小さくしておくことをお勧めします。ただし、複数のメソッドが変数にアクセスする必要がある場合は、インスタンス変数またはクラス変数を定義してください。

于 2013-04-21T12:48:36.410 に答える