`
gybin
  • 浏览: 269035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA 逻辑运算符的运算顺序的误解

 
阅读更多

先看下运算的代码: 
boolean test3=true||true&&false; 
boolean test5=false&&true||true 
System.out.println("test3="+test3); 
System.out.println("test5="+test5); 

是谁像我一样把 test3 算成 false的? 
结果: 
test3=true 
test5=true 

下面来解释下: 
大家都知道短路的说法吧。 
1.逻辑与(&&),如果第一个操作数为false,那么结果肯定false,所以在这种情况下,将不会执行逻辑与后面的运算了,即发生了短路。 

2.逻辑或(||),如果第一个操作数为ture,那么结果肯定是ture,所以在这种情况下,将不会执行逻辑与后面的运算了,即发生了短路。 

关于短路注意: 
一旦能够明确无误地确定整个表达式的值,就不会再计算表达式剩余的部分了。注意一定要是明确无误地确定整个表达式的值才会短路。 

像上面的情况:既有&&又有||这个时候就不会短路,而是按照优先级进行运算。&&是先于||所以&&的先运算,而局部运算也会走短路逻辑。 
例如: 
boolean test2=false&&5/0>0||false;(结果为:test2=false) 
5除以0 ,明显被除数为0会报错,而此时运行确没有报错,就是因为逻辑与短路。 
而反过来 
boolean test2=true&&5/0>0||false; 
就会报被除数为0错误。 

总结: 
逻辑运算符运算是,如果明确无误地确定整个表达式的值,就会走“短路”逻辑,而如果比较复杂的话就会按照优先级进行运算,而局部运算也会用到短路逻辑。 

运算符优先级参考: 
http://blog.csdn.net/xiaoli_feng/article/details/4567184 

分享到:
评论

相关推荐

    Java运算符之算术运算符.docx

    Java中的算术运算符是编程过程中非常基础且重要的部分,它们用于执行基本的数学运算,如加法、减法、乘法、除法等。在Java中,算术运算符分为一元运算符和二元运算符。 1. **一元运算符**: - **正(+)**:对操作数...

    JAVA SE 运算符知识归纳及细节

    如果遇到优先级判断,使用小括号可以清晰地控制运算顺序。 2. **懒人必备运算符** - **+=, -=, /=, *=, %=** 是赋值运算符的快捷形式,例如 `x += y` 相当于 `x = x + y`。 3. **关系运算符** - **>** (大于): ...

    超级有影响力霸气的Java面试题大全文档

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 14、HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空...

    <<编程修养>>

    - **括号使用**:正确使用括号以确保运算顺序,避免误解。 - **const关键字**:利用const限定函数参数,提高代码安全性。 - **函数参数**:控制函数参数数量,减少复杂度。 - **返回类型**:明确函数返回类型,避免...

    2021-2022计算机二级等级考试试题及答案No.995.docx

    - **整型运算符**:在C语言中,模运算符`%`的运算对象必须是整型。 ### 21. PowerPoint中的动画效果 **题目描述**:询问如何在PowerPoint中设置对象的“飞入”动画效果。 **知识点**: - **自定义动画**:在...

    2021-2022计算机二级等级考试试题及答案No.1157.docx

    通过这种方式,开发者可以根据实际需求调整用户在多个控件之间切换的逻辑顺序。 ### 2. 数据源连接对象 在.NET框架中,与数据源建立连接的对象是**DataReader**(选项B)。例如,在ADO.NET中,`SqlConnection`用于...

    2021-2022计算机二级等级考试试题及答案No.3735.docx

    - **知识点**:在编程语言中,逻辑表达式的求值遵循特定的运算规则。 - **描述**:根据给定的条件,a&gt;b&gt;=c AND a=d 的值为False。 #### 23. Access主菜单功能 - **知识点**:Access是Microsoft Office套件中的一个...

    2021-2022计算机二级等级考试试题及答案No.3958.docx

    宏定义在预处理阶段进行替换,不考虑表达式的运算顺序。 **解析:** 题目中的宏定义`#define f(x) x*x*x`用于计算一个数的三次方。当宏`f(a+1)`被调用时,由于宏定义不考虑表达式的优先级,实际计算的是`(a+1)*(a+1...

    Spring.3.x企业应用开发实战(完整版).part2

    7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target...

    Spring3.x企业应用开发实战(完整版) part1

    7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target...

    2021-2022计算机二级等级考试试题及答案No.12407.docx

    条件表达式与逻辑运算 - **条件表达式的计算**: - 当`a = -14, b = 3`时,条件表达式的计算结果为`-14`(A)。这表明条件表达式的计算取决于给定的条件和运算符。 ### 11. 数组操作 - **数组下标越界问题**: ...

    2021-2022计算机二级等级考试试题及答案No.3724.docx

    Java 中使用模运算符 `%` 来判断一个数是否能被另一个数整除。题目中的正确答案应该是判断 n 不能被 13 整除的表达式。 **正确答案应为** `n % 13 != 0`,这表示如果 n 不能被 13 整除,则表达式的值为 true。 ###...

Global site tag (gtag.js) - Google Analytics