javap Java代码分析

源代码:

public class Demo {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);

        String s3 = "abc" + s1 + "def";
        String s4 = "abcabcdef";
        System.out.println(s3 == s4);

        String s5 = s3.intern();
        System.out.println(s4 == s5);
    }
}

代码分析:

 public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=1
         0: ldc           #2                  // String abc  加载常量abc
         2: astore_1                          // 将abc放到局部变量表1中
         3: ldc           #2                  // String abc 加载常量abc
         5: astore_2                          // 将abc放到局部变量表2中
         6: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;   
         9: aload_1                           // 从局部变量1中装载引用类型值
        10: aload_2                           // 从局部变量2中装载引用类型值
        11: if_acmpne     18                  // 比较局部变量1和局部变量2相等
        14: iconst_1                          // 
        15: goto          19
        18: iconst_0
        19: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
        22: new           #5                  // class java/lang/StringBuilder
        25: dup
        26: invokespecial #6                  // Method java/lang/StringBuilder."<init>":()V
        29: ldc           #2                  // String abc
        31: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        34: aload_1
        35: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        38: ldc           #8                  // String def
        40: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        43: invokevirtual #9                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
        46: astore_3
        47: ldc           #10                 // String abcabcdef
        49: astore        4
        51: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
        54: aload_3
        55: aload         4
        57: if_acmpne     64
        60: iconst_1
        61: goto          65
        64: iconst_0
        65: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
        68: aload_3
        69: invokevirtual #11                 // Method java/lang/String.intern:()Ljava/lang/String;
        72: astore        5
        74: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
        77: aload         4
        79: aload         5
        81: if_acmpne     88
        84: iconst_1
        85: goto          89
        88: iconst_0
        89: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
        92: return
      LineNumberTable:
        line 10: 0
        line 11: 3
        line 12: 6
        line 14: 22
        line 15: 47
        line 16: 51
        line 18: 68
        line 19: 74
        line 20: 92
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      93     0  args   [Ljava/lang/String;
            3      90     1    s1   Ljava/lang/String;
            6      87     2    s2   Ljava/lang/String;
           47      46     3    s3   Ljava/lang/String;
           51      42     4    s4   Ljava/lang/String;
           74      19     5    s5   Ljava/lang/String;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值