gpt4 book ai didi

Java 三元运算符 : is behaviour similar to conditional move possible (assembly) upon ART?

转载 作者:搜寻专家 更新时间:2023-11-01 08:37:02 27 4
gpt4 key购买 nike

我想澄清一些关于 Java 中的三元运算符的疑虑。

在 Java 中,它看起来像:x = (c ? a : b)。根据我的阅读和经验,它似乎是作为分支 if/else 执行的,这意味着只评估一个语句(a 或 b,但不会同时评估)。我想知道它是否总是正确的。

在 C 中,它可能被编译成条件移动,它计算表达式 a 和 b。

准确地说,我想知道它是否也适用于 Android 代码。知道 Java 字节码实际上在安装到具有最新操作系统的设备上时被翻译成 native 指令(参见 Android Runtime(ART) )。 ART 之后是否存在条件移动出现的风险?

让我们举个例子。一个基本类,其中包含:

//class content

int victoriesA = 0;
int nonVictoriesA = 0;
int totalCalls = 0;

//...class content

public int getIncrementedCounter(int goalsA,int goalsB){
totalCalls++;
return (goalsA > goalsB ? ++victoriesA : ++nonVictoriesA);
}

public boolean testOpertor(){
return (totalCalls == victoriesA + nonVictoriesA);
}

如果在程序执行期间多次调用 getIncrementedCounter ,函数 testOperator 是否总是返回 true ? (假设代码在单线程上运行)

我知道我应该只使用 if/else 分支来确保摆脱困境,但我仍然想知道....

最佳答案

根据Java Language Specification, chapter 15.25

At run time, the first operand expression of the conditional expression is evaluated first. If necessary, unboxing conversion is performed on the result.

The resulting boolean value is then used to choose either the second or the third operand expression:

If the value of the first operand is true, then the second operand expression is chosen.

If the value of the first operand is false, then the third operand expression is chosen.

符合语言规范意味着只评估 1 个表达式。

关于Java 三元运算符 : is behaviour similar to conditional move possible (assembly) upon ART?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35891989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com