我想澄清一些关于Java中三元运算符的疑问。
在 Java 中,它看起来像:x = (c ? a : b)。根据我的阅读和经验,它似乎是作为 if/else 分支执行的,这意味着只评估一个语句(a 或 b,但绝不会同时评估)。我想知道它是否总是正确的。
在 C 中,它可能被编译成条件移动,它计算表达式 a 和 b。
准确地说,我想知道它是否也适用于 Android 代码。知道 Java 字节码实际上是在安装到具有最新操作系统的设备上时翻译成本机指令(请参阅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 分支来确保摆脱麻烦,但我仍然想知道......