-
Notifications
You must be signed in to change notification settings - Fork 12
(七十五)关于java && 和 || 优先级的探讨
happyjiatai edited this page Jan 12, 2019
·
2 revisions
从搜索结果来看&&的优先级比||高,所以默认下面代码
System.out.println(false && true || true); //true 因为 &&比||优先
System.out.println(true || true && false); //true 因为 &&比||优先
等效于
System.out.println((false && true) || true);
System.out.println(true || (true && false));
返回结果都是true
但这个不直观,不知道到底判断顺序是不是这样
写个demo:
private static void testBoolean(){
int i = 0;
int j = 0;
int k = 0;
boolean flag = (++i > 0) || (++j > 0) && (++k > 0);
System.out.println(i + "--" + j + "---" + k);
}
结果:
flag为true
1--0---0
推断:
boolean flag = (++i > 0) || (++j > 0) && (++k > 0);
等效于
boolean flag = (++i > 0) || ((++j > 0) && (++k > 0));
&&优先级虽然比||高,但仍然会被||短路掉,只判断了++i >0,后面被||短路了。
第二个demo
private static void testBoolean2(){
int i = 0;
int j = 0;
int k = 0;
boolean flag = (++i > 0) && (++j > 0) || (++k > 0);
System.out.println(i + "--" + j + "---" + k);
}
结果:
flag为true
1--1---0
(k被短路掉了)
private static void testBoolean3(){
int i = 0;
int j = 0;
int k = 0;
boolean flag = (++i < 0) && (++j > 0) || (++k > 0);
System.out.println(i + "--" + j + "---" + k);
}
结果:
flag为true
1--0---1
(j被&&短路掉了)
虽然&& 优先级比 || 高,但还是受|| 短路影响,&&优先级高不代表其比||先做运算,仍有可能受||短路影响。
PS:既然看代码都要手动/心里加括号,那手动写的时候先加上多好。。。可读性能高上不少,考试不谈。。。