If statement 三元运算符的效率是否低于为变量设置不同值的if语句
例1:If statement 三元运算符的效率是否低于为变量设置不同值的if语句,if-statement,conditional-operator,If Statement,Conditional Operator,例1: a = a > b ? b : a 例2: if (a > b) a = b 虽然差异可能不大,但我认为示例2的计算效率更高,如示例1中所示,如果ab 如果您对语义相等的三值运算和If-else块的性能差异感兴趣,那么答案是否,差别不大。三元运算符只是书写if-else的一种语法糖 这里是最简单的Java程序中的字节码比较,只有一个(入口点)main方法,在第一种情况下我实现了三元运算符,在第二种情况下实现了one-if-else语句 //First examp
a = a > b ? b : a
例2:
if (a > b)
a = b
虽然差异可能不大,但我认为示例2的计算效率更高,如示例1中所示,如果a
//First example, having Ternary Operator
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iconst_1
3: istore_2
4: iload_1
5: iload_2
6: if_icmple 13
9: iload_2
10: goto 14
13: iload_1
14: istore_1
15: return
}
另一方面,我认为编译器可能理解这一点,并且这两个语句在编译后工作效率相同,因为它们对应于相同的指令?在您的例子中,您的三元运算和if语句不相同,因为if之后没有else语句,所以它只检查a>b
如果您对语义相等的三值运算和If-else块的性能差异感兴趣,那么答案是否,差别不大。三元运算符只是书写if-else的一种语法糖
这里是最简单的Java程序中的字节码比较,只有一个(入口点)main方法,在第一种情况下我实现了三元运算符,在第二种情况下实现了one-if-else语句
//First example, having Ternary Operator
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iconst_1
3: istore_2
4: iload_1
5: iload_2
6: if_icmple 13
9: iload_2
10: goto 14
13: iload_1
14: istore_1
15: return
}
如果您确实想确定,您可以随时检查编译器输出。虽然老实说,我没有看到第一个版本有什么真正的优势,但保存一行代码是非常重要的insignificant@UnholySheep我只是好奇它是如何工作的!我肯定只会在我的代码中使用可读性更好的东西。