Java クラスに 2 つのフィールドがあり、どちらも整数です。
int a = 0;
int b = a * a;
フィールドがa別の値を受け取ると10、たとえば 。しかし、それは field には何の影響も与えません。bこの field は0の代わりに残ります100。
「Java」スタイルで最善を尽くす方法は?
各フィールドは独立変数であり、それを読み取ると、通常、最後に書き込まれた値(*)が返されます。
必要な動作を実装するには、次bのメソッドを作成する必要があります。
public class X {
int a = 0;
int b() {
return a*a;
}
}
ここで、a10に設定するとb()100が返されます。これは、に値を割り当てることができないことも意味しますがb()、常にその値にしたい場合はa*a、とにかくこれもおそらく期待することです。
また、非公開にしてアクセサメソッドを追加することをお勧めしますaが、それはまったく別の話です。
(*)単一のスレッド、および/または複数のスレッドの場合の適切な調整を想定しています。
また、bに値を割り当てる必要があります。aとbをプライベートにし、両方のゲッターに加えて、次のようにbも更新するaのセッターを提供する必要があります。
int getA() {
return a;
}
int getB() {
return b;
}
void setA(int a) {
this.a = a;
this.b = a*a;
}
int b = a * a;単純に計算を行い、結果を保存することに注意してください。Java は結果がどこから来たのか覚えていません。変更した場合は、そのa変更を反映するために手動で更新する必要がありますb。
これらは参照ではなくプリミティブです。一方を変更しても、もう一方には影響しません。
何をしようとしているのかわからない。
その2行目
int b = a* a
がjvmによって処理されると、jvmによって記憶されなくなります。bの値のみがメモリに残ります。