本文主要是介绍(七十五)关于java 和 || 优先级的探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 网上搜索结果
从搜索结果来看&&的优先级比||高,所以默认下面代码
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
但这个不直观,不知道到底判断顺序是不是这样
2.测试
2.1 测试||短路
写个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被短路掉了)
2.2 测试&&短路
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被&&短路掉了)
3. 总结
虽然&& 优先级比 || 高,但还是受|| 短路影响,&&优先级高不代表其比||先做运算,仍有可能受||短路影响。
PS:既然看代码都要手动/心里加括号,那手动写的时候先加上多好。。。可读性能高上不少,考试不谈。。。
这篇关于(七十五)关于java 和 || 优先级的探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!