java - 如何在 Java 中跳过计算 0 * ... 之后算术表达式的剩余部分

标签 java arithmetic-expressions

在逻辑表达式中,如果不需要,剩余部分将被跳过

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/

相关文章:

java - 多个通用类型

java - 如何在 Spring MVC 中使用内容类型 ModelAndView

sqlite - 数学表达式在Google中有效,但在sqlite或KornShell中无效。

MATLAB:是否可以在 native 构造(单元、结构等)上重载运算符?

java - java如何定义算术表达式的结果

c++ - 在 C++ 中使用 - 二元运算符从变量中取出 int 时发出警告。是什么原因?

Java:具有类似于 ArrayList 的方法/功能的二维数组

java - Horizo​​ntalListView 缩放内容(项目布局)

java - ANDROID onBackPressed 不适用于该 Activity

c - 如何获取函数内 double 值的绝对值(不使用 math.h)