三元运算符与if...else...的比较

两段简短的测试代码:

Test2.java (三元运算符)

public   class  Test2 
{
    
public static void main(String args[])
    
{
        
int m =1, n=2;
        String s 
= m > n ? "a" : "b";
    }

}

 

Test3.java(if...else...)

public   class  Test3 
{
    
public static void main(String args[])
    
{
        
int m = 1, n = 2;
        
if(m > n) {
            String s 
= "a";
        }

        
else {
            String s 
= "b";
        }

    }

}

 

编译后用javap反编译得到下面指令码:

Compiled from "Test2.java"
public class Test2 extends java.lang.Object{
public Test2();
  Code:
   0: aload_0
   1: invokespecial #1; //Method java/lang/Object."<init>":()V
   4: return

public static void main(java.lang.String[]);
  Code:
   0: iconst_1
   1: istore_1
   2: iconst_2
   3: istore_2
   4: iload_1  <-- 变量表索引1处的值压入堆栈,即m的值1
   5: iload_2  <-- 变量表索引2处的值压入堆栈,即n的值2
   6: if_icmple 14  <-- 比较上面两个值,若true继续,否则跳转到14
   9: ldc #2; //String a  <-- load constant,将"a"压入堆栈
   11: goto 16
   14: ldc #3; //String b  <-- 将"b"压入堆栈
   16: astore_3  <-- 从堆栈弹出值,存储到变量表索引3处
   17: return

}

----------------------------------------

Compiled from "Test3.java"
public class Test3 extends java.lang.Object{
public Test3();
  Code:
   0: aload_0
   1: invokespecial #1; //Method java/lang/Object."<init>":()V
   4: return

public static void main(java.lang.String[]);
  Code:
   0: iconst_1
   1: istore_1
   2: iconst_2
   3: istore_2
   4: iload_1
   5: iload_2
   6: if_icmple 15
   9: ldc #2; //String a
   11: astore_3
   12: goto 18
   15: ldc #3; //String b
   17: astore_3
   18: return

}

 关键处都做了注释,一目了然了吧

两者区别不大,只是if...else...多了一条指令,这点差别可以忽略了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值