0

Java クラスに 2 つのフィールドがあり、どちらも整数です。

int a = 0;  
int b = a * a;

フィールドがa別の値を受け取ると10、たとえば 。しかし、それは field には何の影響も与えません。bこの field は0の代わりに残ります100

「Java」スタイルで最善を尽くす方法は?

4

5 に答える 5

3

各フィールドは独立変数であり、それを読み取ると、通常、最後に書き込まれた値(*)が返されます。

必要な動作を実装するには、次bのメソッドを作成する必要があります。

public class X {
    int a = 0;

    int b() {
        return a*a;
    }
}

ここで、a10に設定するとb()100が返されます。これは、に値を割り当てることができないことも意味しますがb()、常にその値にしたい場合はa*a、とにかくこれもおそらく期待することです。

また、非公開にしてアクセサメソッドを追加することをお勧めしますaが、それはまったく別の話です。

(*)単一のスレッド、および/または複数のスレッドの場合の適切な調整を想定しています。

于 2013-02-16T22:30:36.417 に答える
3

また、bに値を割り当てる必要があります。aとbをプライベートにし、両方のゲッターに加えて、次のようにbも更新するaのセッターを提供する必要があります。

int getA() {
    return a;
}

int getB() {
    return b;
}

void setA(int a) {
    this.a = a;
    this.b = a*a;
}
于 2013-02-16T22:26:45.537 に答える
2

int b = a * a;単純に計算を行い、結果を保存することに注意してください。Java は結果がどこから来たのか覚えていません。変更した場合は、そのa変更を反映するために手動で更新する必要がありますb

于 2013-02-16T22:55:11.030 に答える
0

これらは参照ではなくプリミティブです。一方を変更しても、もう一方には影響しません。
何をしようとしているのかわからない。

于 2013-02-16T22:24:47.257 に答える
0

その2行目 int b = a* a がjvmによって処理されると、jvmによって記憶されなくなります。bの値のみがメモリに残ります。

于 2013-02-16T22:32:02.583 に答える