我想澄清一些关于java中三元运算符的疑问。
在java中,它看起来像:x=(c?甲:乙)。根据我的阅读和经验,它似乎是作为一个分支if/else执行的,这意味着只计算一个语句(a或b,但不能同时计算这两个语句)。我想知道这是否总是真的。
在C语言中,它可能被编译成条件移动,条件移动计算表达式A和B。
准确地说,我想知道Android代码是否也是这样。知道Java字节码在安装到具有最新操作系统的设备上时实际上被转换为本机指令(请参见Android Runtime(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
在运行时,首先计算条件表达式的第一个操作数表达式。如果需要,对结果执行解压转换。
然后,使用生成的布尔值选择第二个或第三个操作数表达式:
如果第一个操作数的值为真,则选择第二个操作数表达式。
如果第一个操作数的值为false,则选择第三个操作数表达式。
符合语言规范意味着只计算1个表达式。
关于java - Java三元运算符:是否可以在ART上进行类似于条件移动(组装)的行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35891989/