JAVA逻辑运算符的“短路特性”-CSDN博客

111 阅读1分钟

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

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.