用属性计算

时间:2019-05-02 12:10:44

标签: java

为什么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

3 个答案:

答案 0 :(得分:1)

C仅计算一次。在定义期间。 C=A+B在类加载期间执行。之后,您将更新AB。因此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将随着AB的每次更新而更新,而仅定义其初始值

您必须自己使用AB变量的每个增量来更新其值:

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的工作量很小,这是一个有效的解决方案。