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

那里只有一种“if”语句。 另一个是条件表达式。 至于哪个会表现得更好:它们可以编译成相同的字节码,我希望它们的行为相同 - 或者说非常接近,你绝对不希望在性能方面选择其中一个。

有时istore_1语句将更具可读性,有时条件运算符将更具可读性。 特别是,当两个操作数是简单且无副作用时,我建议使用条件运算符,而如果两个分支的主要目的是它们的副作用,我可能会使用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;

}

}

字节码反编译为istore_1:

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最终得到不同的本机代码,我会非常惊讶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值