我收到了这样的评估,但这两个问题一直萦绕在我的脑海中。这两个代码看起来相似,但根据增量给出不同的输出
代码#1:
package com.company;
class Main {
public static void main(String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
if((z++ == 42) && (y = true))
z++;
if((x = false) || (++z == 45))
z++;
System.out.println("z = " + z);
}
}
这段代码看起来很好,它增加了应该增加的值,并将该值返回给“z”,从而输出
输出:
z = 46
Process finished with exit code 0
但是第二个代码似乎有所不同,因为它不保存递增的值
代码#2: 包 com.company;
公开课测试2
{
public static void main(String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
if((x == true) && (y = true))
z++;
if((y == true) || (++z == 44))
z++;
System.out.println("z = " + z);
}
}
这个代码不像第一个代码那样保存第二个 if 条件语句的增量
输出:
z = 44
Process finished with exit code 0
我错过了什么重要的事情吗?
最佳答案
这是因为逻辑 OR 运算符 (||
) 是短路:如果已知第一个条件为真,则第二个条件根本没有执行。
这意味着 (++z == 44)
中的 z++
没有被执行,因此最终结果是 44 而不是 45。
正如评论中提到的,按位 OR 运算符 (|
) 不是短路,因此两条语句始终都会执行。
这样的代码可能会非常困惑。代码应该主要是可读的。切勿在条件内使用赋值。 b = false
很容易与 b == false
混淆。还要避免在其他操作中间使用增量运算符,仅作为独立表达式。
关于Java自增逻辑问题(条件语句中自增),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61259808/