为什么C等于0。 我想使用修改后的属性进行计算时该怎么办。 为什么C使用默认设置变量而不使用修改后的变量进行计算。
public class Object{
int A;
int B;
int C=A+B;
int AddOnetoA(){
A=A+1;
return A;
}
int AddOnetoB(){
B=B+1;
return B;
}
void ShowA() {
System.out.println(A);
}
void ShowB() {
System.out.println(B);
}
void ShowC() {
System.out.println(C);
}
}
并且:
public static void main(String[] args) {
Object obj =new Object();
obj.AddOnetoA();
obj.AddOnetoA();
obj.AddOnetoA();
obj.AddOnetoB();
obj.AddOnetoB();
obj.AddOnetoB();
obj.ShowA();
obj.ShowB();
obj.ShowC();
}
输出:
3
3
0
答案 0 :(得分:1)
C
仅计算一次。在定义期间。 C=A+B
在类加载期间执行。之后,您将更新A
和B
。因此C
保持为0
换句话说,对表达式中使用的变量的更新效果不会追溯应用于这些表达式。
答案 1 :(得分:0)
未设置的整数的默认值为0
。
您执行以下操作:
int A; // sets A to 0
int B; // sets B to 0
int C=A+B; // sets C to A + B = 0 + 0 = 0
符号C=A+B
并不意味着值C
将随着A
或B
的每次更新而更新,而仅定义其初始值强大的价值。
您必须自己使用A
或B
变量的每个增量来更新其值:
int AddOnetoA(){
A=A+1;
c = A + B; // here
return A;
}
int AddOnetoB(){
B=B+1;
c = A + B; // and here
return B;
}
请勿创建名称为Object
的对象,该对象是每个对象都继承的对象。在这种简单情况下,例如使用MyObject
。
最后,我强烈建议您遵循Java约定,并以小写字母开头的变量和方法的名称,例如:
int addOnetoB(){
b = b + 1; // equal to b++;
c = a + b; // and here
return b;
}
答案 2 :(得分:0)
如果希望C始终反映A + B的总和,则可以删除int C;
并更改showC
:
void ShowC() {
System.out.println(A+B);
}
如果计算C的工作量很小,这是一个有效的解决方案。