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

来源:互联网 发布:如何安装pscs6软件 编辑:程序博客网 时间:2024/04/19 18:13

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

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.

原创粉丝点击