【发布时间】:2013-12-07 18:59:15
【问题描述】:
自从我开始编写 Java 以来,我注意到每个人都在使用 && 和 || 而不是 & 和 |。这是什么原因?我一直在使用&& 和||,因为我不知道你可以在布尔值上使用& 和|。
class A{static{
boolean t = true;
boolean f = false;
System.out.println("&ff " + (f&&f) + " " + (f&f));
System.out.println("&ft " + (f&&t) + " " + (f&t));
System.out.println("&tf " + (t&&f) + " " + (t&f));
System.out.println("&tt " + (t&&t) + " " + (t&t));
System.out.println("|ff " + (f||f) + " " + (f|f));
System.out.println("|ft " + (f||t) + " " + (f|t));
System.out.println("|tf " + (t||f) + " " + (t|f));
System.out.println("|tt " + (t||t) + " " + (t|t));
}}
据我所知,它们是相同的:
$ javac A.java && java A
&ff false false
&ft false false
&tf false false
&tt true true
|ff false false
|ft true true
|tf true true
|tt true true
Exception in thread "main" java.lang.NoSuchMethodError: main
使用|| 和&& 是否会以任何方式改进我的代码?
作为一个简单的测试,我用简短的形式替换了数百次,我的所有单元测试仍然通过。
【问题讨论】:
-
不这样做的一个原因是它引入了侧通道...
-
看看 Erlang。它不进行短路评估,因为它引入了不确定性/不可预测性。短路评估不利于测试。
-
投反对票的原因是什么?这怎么不是一个有效的问题?
标签: java boolean operators bit-manipulation conditional-statements