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;
}
}
ここで、a
10に設定すると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の値のみがメモリに残ります。