在逻辑表达式中,如果不需要,剩余部分将被跳过
boolean b = false && checkSomething( something)
//checkSomething() doesn't get called
使用算术表达式实现相同目的的好方法是什么?
int i = 0 * calculateSomethig ( something )
可以在 * 之前添加 if 。但是有没有更优雅的方法来解决这个问题呢?无需在表达式中添加太多内容,以便表达式本身看起来尽可能接近原始
为什么我不想使用 ifs? 来自
return calculateA() * calculateB()
它会变得笨重且不清晰
int result
int a = calculateA();
if (a!=0) {
result = a*calculateB()
}else{
result = 0
}
return result
- 8 行代码而不是 1 行,
- 这些表达式可能比 a*b 更复杂
- 这些表达式代表业务逻辑,所以我想保留它们 清晰易读
- 可能有一大堆
我为什么要为此烦恼? 因为计算方法可能很昂贵
- 使用其他进行搜索和排序的地方的值
- 可以立即执行许多这样的表达式(在用户事件之后,用户应该“立即”看到结果
- P(表达式中的*0)>0.5
最佳答案
&&
和 ||
被称为短路运算符,因为它们不会评估 JVM 是否会在不评估整个表达式的情况下找到整个表达式的值。例如,JVM 不必计算以下表达式的第二部分来告诉其计算结果为 true
:
6 == (2 + 4) || 8 == 9
JVM 不必计算以下所有表达式来告诉其计算结果为 false
:
9 == 8 && 7 == 7
乘法运算符 (*) 不是短路运算符。因此,它的行为并非如此。您可以按照您提到的使用 if
语句来执行此操作。没有预定义的方法可以做到这一点。
关于java - 如何在 Java 中跳过计算 0 * ... 之后算术表达式的剩余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697225/