结论:&&优先级高,但却不是先计算,而是把&&左右两边的计算相当于套了个括号,看成了一个整体,再按照从左到右的顺序计算;
boolean a = true || 1/0==1 && 1/0==1;
if (a) {
System.out.println("a====="+a);
}
boolean b = false && 1/0==1 || 1/0==1;
if (b) {
System.out.println("a====="+b);
}
a正在运行,结果为true;
b因为计算了最右侧的1/0==1报错;
开始验证结论
将||左右两次加上括号:
boolean a = (true || 1/0==1) && 1/0==1;
if (a) {
System.out.println("a====="+a);
}
boolean b = false && (1/0==1 || 1/0==1);
if (b) {
System.out.println("a====="+b);
}
给||打上括号,把原有&&的高优先级抹除,可以看到
a因为计算最右侧逻辑报错;
b却因为&&的短路而未计算右侧两个异常除法;