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

关系运算符一览

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`,不需要再对右边的条件表达式进行求值。

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

赋值运算符

  • 赋值运算符就是将某个运算后的值, 赋给指定的变量
  • 赋值运算符的分类:
  1. 基本赋值运算符=

  2. 复合赋值运算符+=,-=,*=,/=,%=

  3. 注意复合赋值运算符会进行类型转换, 如下例:

    byte b = 3;
    b += 2; //等价 b = (byte)(b+2)
    b++; //b = (byte)(b+1);
    

三元运算符

  • 基本语法
    条件表达式?表达式1:表达式2;
  1. 如果条件表达式为true, 运算后的结果是表达式1;
  2. 如果条件表达式为false, 运算后的结果是表达式2;
  • 举个例子

    int a = 10;
    String result = a > 0? "a是正数" : "a是负数";
    System.out.println(result);
    
  • 注意前面有变量承接, 不用也行,明白三元运算符会返回后面的

posted @ 2023-05-07 20:13  sdulyq  阅读(179)  评论(0编辑  收藏  举报