Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

一、且或真假关系表

先了解且或真假关系表的逻辑才能更深入的了解Java中的与或逻辑!

Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

二、Java中的& 和 &&关系解析

相同点:
& 和 &&都可做逻辑与的运算符,表示逻辑与(and),两边都为true时,整个运算结果才为true

不同点:
&&具有短路功能,第一个表达式为false时,不再执行第二个表达式;
&可做位运算符,当做逻辑与运算符时,不管第一个表达式是false还是true,都会执行第二个表达式。

1、&&的解析

Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

以上的两个表达式,第一个表达式是false,第二个会报ArithmeticException异常,但是程序没执行第二个表达式。
总结: &&具有短路功能!!

2、&的解析

Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

以上的两个表达式,第一个表达式是false,第二个会报ArithmeticException异常,但是程序依旧执行了第二个表达式,所以直接报了异常。
总结: &没有短路功能,对所有表达式都会执行!!

三、Java中的 | 和 || 关系解析

相同点:
| 和 || 都做逻辑或的运算符,表示逻辑与(or)

不同点:
|| 具有短路功能,第一个表达式为true时,不再执行第二个表达式;
| 没有短路功能,对于表达式全部执行。

1、|| 的解析

Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

以上的两个表达式,第一个表达式是true,第二个会报ArithmeticException异常,但是程序没执行第二个表达式。
总结: || 具有短路功能!!

2、| 的解析

Java的 & 和 && ,以及 | 和 || 的实例分析(原理+例子)

以上的两个表达式,第一个表达式是true,第二个会报ArithmeticException异常,但是程序依旧执行了第二个表达式,所以直接报了异常。
总结: | 没有短路功能,对所有表达式都会执行!!

四、总结

&& 和 || 都具有短路功能;
& 和 | 没有短路功能,对于表达式都会全部执行。

热心提示:在程序实现的过程中,一定要注意这些逻辑关系,特别是判空的时候,不然容易引起空指针异常。