JAVA逻辑运算符的“短路特性”

阅读下列代码,写出 ①②③④⑤⑥⑦⑧输出的值

public class TestLogic{
    public static void main(String[] args){
         int ia = 3;
         int ib = 2;

         boolean b3 = (++ia == 3 && ++ib == 3);// ①
         System.out.println("b3 = " + b3); //② 
         System.out.println("ia = " + ia); //③ 
         System.out.println("ib = " + ib); //④ 

         System.out.println("-------------------------------");
         //第一个条件为真后,跳过第二个条件的执行
         boolean b4 = (++ia == 5 || ++ib == 3);//
         System.out.println("b4 = " + b4); //⑥ 
         System.out.println("ia = " + ia); //⑦ 
         System.out.println("ib = " + ib); //⑧ 
    }
}

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
答案:

public class TestLogic{
    public static void main(String[] args){
         int ia = 3;
         int ib = 2;
         //在逻辑与第一个条件为假后,跳过第二个条件的执行
         boolean b3 = (++ia == 3 && ++ib == 3);// ①
         System.out.println("b3 = " + b3); //② false
         System.out.println("ia = " + ia); //③ 4
         System.out.println("ib = " + ib); //④ 2

         System.out.println("-------------------------------");
         //在逻辑或中第一个条件为真后,跳过第二个条件的执行
         boolean b4 = (++ia == 5 || ++ib == 3);//⑤
         System.out.println("b4 = " + b4); //⑥ true
         System.out.println("ia = " + ia); //⑦ 5
         System.out.println("ib = " + ib); //⑧ 2 
    }
}

解析:
①是自增和逻辑与运算符,++ia和++ib的++号在前面,所以是先运算在赋值,
根据JAVA中逻辑运算符的特性,第一个表达式是false后,就直接false,不执行第二个表达式了。
②由①知道,ia原本等于3,++ia后等于4,所以b3等于false;
③ia原本等于3,++ia后,ia等于4;
ib依然等于2,因为①逻辑与中第一个表达式是false,所以第二个表达式中++ib没有执行,所以ib还是原来的初始化赋值等于2.

⑤这里是自增运算符和逻辑运算符,因为由③可知,ia已经等于4了,在执行++ib等于5,在逻辑运算符中,第一个表达式为true,就不在执行后面的表达式了。
⑥由⑤可知⑥为true;
⑦由⑤可知⑦打印出来的是5;
⑧ib依然是2,因为⑤逻辑或第一个表达式为true后,就没有执行后面的表达式了,所以++ib没有执行,i所以ib依然是2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值