阅读下列代码,写出 ①②③④⑤⑥⑦⑧输出的值
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.