0

我在java类中有两个字段,都是整数:

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

例如,一旦该字段a接收到另一个值,10。但它对 field 没有任何影响b,这个 field 仍然存在0而不是100

如何以“java”风格做到最好?

4

5 回答 5

3

您还必须为 b 分配一个值。您应该将 a 和 b 设为私有,并为两者提供 getter,并为 a 提供一个 setter,它也像这样更新 b:

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 回答
3

每个字段都是一个独立变量,读取它通常会返回最后写入它的值 (*)。

为了实现您需要的行为,您应该创建b一个方法:

public class X {
    int a = 0;

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

现在,设置a为 10 将b()返回 100。这也意味着您不能将值分配给b(),但如果您总是希望它的值是,a*a这可能也是您所期望的。

我还建议您保持a私有并为其添加访问器方法,但这完全是另一回事。

(*) 假设单个线程和/或在多个线程的情况下进行适当的协调。

于 2013-02-16T22:30:36.417 回答
2

请注意,它int b = a * a;只是进行计算并存储结果。Java 不记得结果来自哪里。如果a发生更改,您将需要手动更新b以传播该更改。

于 2013-02-16T22:55:11.030 回答
0

这些是原语而不是参考。改变一个不会影响另一个。
不知道你想做什么。

于 2013-02-16T22:24:47.257 回答
0

一旦 int b = a* a jvm 处理了第二行,jvm 就不会记住它。只有 b 的值将保留在内存中。

于 2013-02-16T22:32:02.583 回答