那里只有一种“ if”语句。另一个是条件表达式。至于哪种性能更好:它们可以编译为相同的字节码,并且我希望它们的行为相同-
或如此接近以至于您绝对不希望在性能方面选择一个。
有时一条
if语句更具可读性,有时条件运算符将更具可读性。特别是,当两个操作数简单且无副作用时,我建议使用条件运算符,而如果两个分支的主要目的 是
它们的副作用,则可能要使用一条
if语句。
这是一个示例程序和字节码:
public class Test { public static void main(String[] args) { int x; if (args.length > 0) { x = 1; } else { x = 2; } } public static void main2(String[] args) { int x = (args.length > 0) ? 1 : 2; }}字节码反编译为
javap -c Test:
public class Test extends java.lang.Object { public Test(); Code: 0: aload_0 1: invokespecial #1 4: return public static void main(java.lang.String[] Code: 0: aload_0 1: arraylength 2: ifle 10 5: iconst_1 6: istore_1 7: goto 12 10: iconst_2 11: istore_1 12: return public static void main2(java.lang.String[ Code: 0: aload_0 1: arraylength 2: ifle 9 5: iconst_1 6: goto 10 9: iconst_2 10: istore_1 11: return}如您所见,这里的字节码 略有 不同-
是否
istore_1在brance中发生(不同于我以前的严重缺陷尝试:),但是如果JITter以不同的本机代码结束,我将感到非常惊讶。



