0

私の悪い例のためにこの質問を編集しました..これが私の更新された質問です:

以下は、速度とメモリ割り当てが同じですか。

int b;
for (int i = 0; i < 1000; i++)
    b = i;

for (int i = 0; i < 1000; i++)
    int b = i;
4

7 に答える 7

4

いいえ、そうではありません。

最初のケースでは、1 つの変数に 1000 個の異なる値が割り当てられ、コンストラクターの完了後に最後の値 (999) を取得できるようになります。

2 番目のケースでは、基本的にノーオペレーション メソッドを 1000 回呼び出しています。2 番目のメソッドには副作用がなく、戻り値がないため、役に立ちません。ローカル変数は、メソッド呼び出しの間のみ「存在」しますが、最初の例のインスタンス変数はオブジェクトの一部であるため、存続します。

これはプリミティブに限定されないことに注意してください。他のタイプも同じように動作します。

于 2009-10-16T08:39:22.690 に答える
3

いいえ

  • Class1変数にaは、クラスのすべてのメソッドからアクセスできるフィールドがあります。
  • これClass2は当てはまりません:aメソッド内のローカル変数ですassign。終了後assign、 の値aは破棄されます。
于 2009-10-16T08:38:58.370 に答える
2

いいえ、1 つはインスタンス変数a(Class1) を持ち、もう 1 つは持っていません。

于 2009-10-16T08:39:11.370 に答える
0

注目に値するのは、その価値のあるコンパイラーであり、JIT が多くの塩の価値があると固く信じていることです。

于 2009-10-16T18:30:23.227 に答える
0

これを試してみましたか?それはコンパイルさえしません!

for (int i = 0; i < 1000; i++)
    int b = i;

コンパイラからのエラー メッセージ:

Example.java:4: '.class' expected
                    int b = i;
                        ^
Example.java:4: not a statement
                    int b = i;
                    ^
Example.java:4: illegal start of expression
                    int b = i;
                          ^

ループの本体には、少なくとも 1 つのステートメントが含まれている必要があります。変数宣言はステートメントではないため、変数宣言だけのループは無効です。

于 2009-10-16T18:33:53.113 に答える