Java学习之旅第一季-18:运算符之逻辑运算符与条件运算符

Java中用于布尔类型数据的操作符除了等值比较之外,还包括逻辑运算符及条件运算符。

18.1 逻辑运算符

逻辑运算符用于操作两个布尔类型的数据,产生的结果也是布尔类型,在实际开发使用非常频繁。

Java针对布尔类型数据的逻辑运算符有三个:

  • &&:与运算,二元运算符,只有参与运算的布尔类型数据都是true时,结果才是true
  • ||:或运算,二元运算符,只要参与运算的布尔类型数据有一个是true时,结果就是true
  • !:非运算,一元运算符,结果是参与运算的布尔类型数据相反的值

在编写代码时,上面几个符号要使用英文输入法,且 &&、|| 中间没有空格

与运算示例

int num1 = 101;
System.out.println(num1 > 0 && num1 % 2 == 0);

上述代码中输出的表达式中,num1 > 0 的结果是 true,num1 % 2 == 0 的结果是 false,所以进行与运算的结果是 false。

由于布尔数据类型只有两个值,所以与运算只有以下四种可能:

System.out.println(true && true);     // true
System.out.println(true && false);    // false
System.out.println(false && true);    // false
System.out.println(false && false);   // false

上面4行代码代表了与运算所有可能的操作数,只有两个操作数都是true,其运算结果才是true,否则结果就是false。

或运算示例

int num2 = 101;
System.out.println(num2 > 0 || num1 % 2 == 0);

上述代码中输出的表达式只是将与运算改成了或运算,num1 > 0 的结果是 true,num1 % 2 == 0 的结果是 false,所以进行或运算的结果是 true。因为或运算的规则是只要参与运算的布尔类型数据有一个是true时,结果就是true。

同样的,或运算只有以下四种可能:

System.out.println(true || true);     // true
System.out.println(true || false);    // true
System.out.println(false || true);    // true
System.out.println(false || false);   // false

上面4行代码代表了或运算所有可能的操作数,只要两个操作数有一个是true,其运算结果就是true,否则结果就是false。也就是参与运算的数据两个都是false,或运算的结果才是false、

非运算示例

boolean b1 = true;
System.out.println(!b1);   // false

代码的第1行将布尔类型的数据true赋值给了变量b1,第2行对b1进行了非运算,即在b1前加了个!,那么运算结果就是false。

非运算根据操作数的可能值,也就两种情况:

System.out.println(!true);
System.out.println(!false);

18.2 与运算和或运算的短路

所谓短路(short-circuit),是来自物理学,是指电流不经过负载而直接构成回路。

在Java中短路是指当前面的操作数(布尔类型)已经决定了整个运算的结果,则后面的表达式不会执行。例如下面的示例代码展示了与运算的短路特点:

int num1 = 20, num2 = 30;
boolean b1 = num1 > 20 && num2++ >= 30;
System.out.println(b1);                 // false
System.out.println(num2);               // 30

代码第2行中,表达式 num1 > 20 的结果是 false,根据与运算的特点,无论后面参与运算的数据是什么,都不会影响整个与运算的结果为false,既然如此,就不需要浪费资源对后面的表达式 num2++ >= 30进行运算了。num2++当然也不会执行自增操作了,所以第4行中num2的值仍然是初始值30。

而下面的代码片段会展示或运算的短路特点:

int num3 = 20, num4 = 30;
boolean b2 = num3 <= 20 || num4++ >= 30;
System.out.println(b2);                 // true
System.out.println(num4);               // 30

与之前的代码类似,不过在第2行表达式 num2 <= 20 的结果是true,根据或运算的特点,无论后面参与运算的数据是什么,都不会影响整个或运算的结果为true,同时后面参与运算的表达式 num4++ >= 30 也不会执行,num4当然也不会自增,仍然为30。

18.3 条件运算符

条件运算符是Java中唯一的三元运算符,其语法形式如下:

布尔表达式 ? 表达式1 : 表达式2

运算规则:首先计算布尔表达式的值,如果为true,则整个运算的结果是表达式1;否则,整个运算的结果表达式2。

示例代码:

int num = 1;
String s = num % 2 == 0 ? "偶数" : "奇数";
System.out.println(s);     // 奇数

上面第2行代码中,赋值运算符右边的表达式就是一个条件运算符的使用,首先会计算 num % 2 == 0 的结果,由于num的初始值是1,所以其结果为false,那么根据运算规则,"奇数"会作为整个条件运算符的运算结果赋值给字符串变量s。

不过要注意的是,整个条件运算符运算之后结果的数据类型与表达式1和表达式2中数据类型范围大的相同,比如:

int num = 1;
System.out.println(num > 0 ? 1 : 0.0);    // 1.0

对于第 2 行中的表达式,首先计算 num > 0 的结果为 true,按照条件运算符的运算规则输出的应该是 1,但是整个表达式中有 0.0参与运算,其数据类型是 double,所以输出的结果会自动转型为double,即为 1.0。

18.4 小结

本小节介绍了Java中布尔类型的操作符包括逻辑运算符(&&、||、!)和条件运算符(?😃。逻辑运算符遵循标准布尔运算规则,其中&&和||具有短路特性:当前面操作数能确定结果时,后续表达式不会执行。条件运算符是唯一的三元运算符,根据布尔表达式结果选择执行两个表达式之一,返回结果会自动类型转换为两个表达式类型中范围较大的类型。这些运算符在Java开发中频繁使用,是控制程序逻辑的重要工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值