使用带有布尔值的double equal运算符

时间:2014-01-27 19:40:18

标签: java equals

所以,我下周将面对决赛,我经历了一些旧的测试。这个引起了我的注意,因为我似乎无法理解代码。

public class Start {
   boolean zustand = false;

    public static void main (Strings[] args){
        Start obj = new Start();

        for(int i = 0; i <= 3; i++){
            if(obj.getZustand() == true){
                System.out.println(""+i+ " true");
            }
            else{
                System.out.println(""+i+ " false");
            }
        }
    }
    public boolean getZustand(){
        zustand = (zustand == false);
        return zustand;
    }
}

我认为输出是

0 true
1 true
2 true
3 true

但是我在eclipse上尝试了它们,输出是

0 true
1 false
2 true
3 false

有人可以向我解释为什么他们并非都是真的吗?

5 个答案:

答案 0 :(得分:4)

每次调用zustand函数时,getZustand变量都会更改。

zustand = (zustand == false);

这行代码与zustand = !zustand相同。请注意zustand是一个类成员字段,因此它的值保持在函数调用之间。

答案 1 :(得分:2)

第一次迭代将成员变量zustand设置为true; false == falsetrue。第二次迭代将变量设置为false; true == falsefalse。然后他们在您发布时交替使用。

答案 2 :(得分:1)

每次拨打zustand时,getZustand()的值都会交替显示。这是因为您要为zustand分配第一个false == falsetrue,然后true == false,即false,依此类推......

答案 3 :(得分:1)

zustand = (zustand == false);
  • 如果zustand true ,则zustand == falsefalsezustand已分配给 false

  • 如果zustand false ,则zustand == falsetruezustand已分配给 true

换句话说,行zustand = (zustand == false)翻转zustand的值(然后返回)。这解释了你的输出。

答案 4 :(得分:0)

每次调用getZustand时,都会翻转obj中的布尔值。

要实现所需的输出,只需返回(zustand == false),或者更简单地说,(!zustand)。