(七) 关系运算符,逻辑运算符,赋值运算符,三元运算符

发布时间 2023-05-07 20:17:50作者: 子琳&me

关系运算符一览

Image description

  • 关系运算符的结果都是boolean类型, 要么为true, 要么为false
  • 关系运算符组成的表达式称为关系表达式, 如a>=b

逻辑运算符一览

  • 用于连接多个条件(多个关系表达式), 最终的结果也是一个boolean

Image description

逻辑运算规则

Image description

逻辑与和短路与区别
Java中逻辑与(`&`)和短路与(`&&`)的区别主要在于:

1. 当使用逻辑与(`&`)时,不管左侧的表达式是否为真,都会执行右侧的表达式,而短路与(`&&`)只有在左侧表达式为真时才会执行右侧的表达式。
2. 当使用逻辑与(`&`)时,左右两侧的表达式都会被计算,而短路与(`&&`)只有在左侧表达式为真时才会计算右侧的表达式。当左侧表达式为假时,短路与不会计算右侧的表达式,直接返回假。

例如,考虑以下代码:

int a = 10, b = 20;
if (a > 5 & b > 30) {
   System.out.println("a 和 b 都大于指定值");
}

if (a > 5 && b > 30) {
   System.out.println("a 和 b 都大于指定值");
}

第一段使用逻辑与(`&`)操作符,两个表达式都会被计算,因为`b > 30`为假,程序会返回假,不会输出任何内容。

第二段使用短路与(`&&`)操作符,第一个表达式`a > 5`为真,程序会继续计算第二个表达式,因为`b > 30`为假,程序最终返回假,同样不会输出任何内容。
逻辑或和短路或的区别
在 Java 中,逻辑或(`|`)和短路或(`||`)都是用于组合条件表达式的逻辑运算符,但是它们在使用上有一些区别。

逻辑或(`|`)会在两边的条件表达式都被求值之后再进行逻辑运算,即使左边的条件表达式已经为 `true`,仍然会去执行右边的条件表达式来判断运算结果。
这个过程中不会有任何短路行为,所以逻辑或不会对条件表达式求值的顺序进行优化。

短路或(`||`)则不同,它也会在两边的条件表达式都被求值之后再进行逻辑运算。
但是如果左边的条件表达式为 `true`,那么右边的条件表达式就不再被求值,因为不管右边的条件表达式的值是什么,最终运算结果都为 `true`。
这种情况下,短路或会对条件表达式的求值顺序进行优化。

举个例子,假设我们有一个条件表达式 `((a > b) || (c < d))`,
其中 `a`、`b`、`c` 和 `d` 都是 `int` 类型。如果 `a` 大于 `b`,那么逻辑或会去计算 `c < d`,
不管它的结果是什么。而短路或则会直接返回 `true`,因为左边的条件表达式已经为 `true`,不需要再对右边的条件表达式进行求值。

总的来说,逻辑或和短路或的区别在于短路或有条件表达式求值短路的特性,
可以避免不必要的计算。对于常见的简单条件表达式,通常使用短路或更加高效。