Java增量逻辑题(条件语句中的增量)
Java increment logical problem (increment in conditional statements)
我收到了给我的评估,但这两个问题一直困扰着我。这两个代码看起来很相似,但是根据增量给出不同的输出
代码#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;
public class 测试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
我是不是漏掉了什么重要的东西?
这是因为逻辑或运算符(||
)短路:如果已知第一个条件为真,则第二个条件根本没有执行.
也就是说(++z == 44)
中的z++
没有被执行,所以最终结果是44而不是45。
如评论中所述,按位 OR 运算符(|
)不会短路,因此始终执行两个语句。
像这样的代码可能会非常混乱。代码应该主要是可读的。切勿在条件内使用赋值。 b = false
很容易与 b == false
混淆。还要避免在其他操作中间使用增量运算符,仅作为独立表达式使用。
我收到了给我的评估,但这两个问题一直困扰着我。这两个代码看起来很相似,但是根据增量给出不同的输出
代码#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;
public class 测试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
我是不是漏掉了什么重要的东西?
这是因为逻辑或运算符(||
)短路:如果已知第一个条件为真,则第二个条件根本没有执行.
也就是说(++z == 44)
中的z++
没有被执行,所以最终结果是44而不是45。
如评论中所述,按位 OR 运算符(|
)不会短路,因此始终执行两个语句。
像这样的代码可能会非常混乱。代码应该主要是可读的。切勿在条件内使用赋值。 b = false
很容易与 b == false
混淆。还要避免在其他操作中间使用增量运算符,仅作为独立表达式使用。