加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么在\u0026\u0026,&,||的情况下输出会

发布时间:2020-12-14 23:39:31 所属栏目:Java 来源:网络整理
导读:这是代码段 你能解释一下输出变化的原因吗? 1) public static ShortCkt { public static void main(String args[]) { int i = 0; boolean t = true; boolean f = false,b; b = (t ((i++) == 0)); b = (f ((i+=2) 0)); System.out.println(i); }} 这种情况下
这是代码段

你能解释一下输出变化的原因吗?

1)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t && ((i++) == 0));
        b = (f && ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出为1

2)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t & ((i++) == 0));
        b = (f & ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是3

3)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t || ((i++) == 0));
        b = (f || ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是2

4)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t | ((i++) == 0));
        b = (f | ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是3

解决方法

Why is the output different in case of &&,&,|| ?

就像在C/C++&&被评估为“懒惰”而&不是.

如果a是假的那么&& b甚至不评估b就会返回false.

同样适用于|| b:如果第一个操作数a为真,则整个表达式为真,第二个操作数b从不进行求值.对于|但是,a和b都将被评估.

如果在使用&&和/或(或||)有副作用,如您的示例中所示.

旁注:很少有java程序员知道^(xor)也适用于布尔值. (A ^^版本不存在仅仅因为它是多余的.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读