gpt4 book ai didi

java - 为什么 &&、&、|| 的输出不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:12 24 4
gpt4 key购买 nike

这是代码段

你能解释为什么输出不同吗

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 为 false,则 a && b 甚至不会计算 b 就返回 false。

同样适用于 a || b:如果第一个操作数 a 为真,则整个表达式为真,并且永远不会计算第二个操作数 b。对于 a | b 但是,ab 都将被评估。

如果在使用 &&(或 ||)时未计算的操作数有副作用,这会产生后果,如您的示例所示。


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

关于java - 为什么 &&、&、|| 的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com