java 三元运算符 效率_java – 哪个“if”结构更快 – 语句或三元运算符?

只有一种类型的“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反编译的字节码测试:

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是发生在分支内还是不发生(不像我以前的巨大缺陷的尝试:)但我会很惊讶,如果JITter结束了不同的本地代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值