String 对象创建的过程--javamap

代码 public class StaticFinalStringTest {

public static void main(String[] args) {
	String a = "x";
	String x = new String("x");
	String q = a + "x";
	String p = a + new String("x");
}

}

javap解析的数据

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

public static void main(java.lang.String[]);

  • Code:
  •    0: ldc           #16   常数到操作数栈              // String x
    
  •    2: astore_1              将引用类型或returnAddress类型值存入局部变量1 
    
  •    3: new           #18        创建类实例         // class java/lang/String
    
  •    6: dup                    复制栈顶部一个字长内容 
    
  •    7: ldc           #16                 // String x
    
  •    9: invokespecial #20       调用需要特殊处理的实例方法          // Method java/lang/String."<init>":(Ljava/lang/String;)V
    
  •   12: astore_2             将引用类型或returnAddress类型值存入局部变量2
    
  •   13: new           #23     创建类实例              // class java/lang/StringBuilder
    
  •   16: dup              复制栈顶部一个字长内容 
    
  •   17: aload_1          从局部变量1中装载引用类型值 
    
  •   18: invokestatic  #25         调用命名类中的静态方法        // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
    
  •   21: invokespecial #29         调用需要特殊处理的实例方法        // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
    
  •   24: ldc           #16           常数到操作数栈       // String x
    
  •   26: invokevirtual #30            调度对象的实例方法     // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
  •   29: invokevirtual #34              调度对象的实例方法    // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
    
  •   32: astore_3                    将引用类型或returnAddress类型值存入局部变量3 
    
  •   33: new           #23           创建类实例      // class java/lang/StringBuilder
    
  •   36: dup                           复制栈顶部一个字长内容 
    
  •   37: aload_1                     从局部变量1中装载引用类型值
    
  •   38: invokestatic  #25             调用命名类中的静态方法    // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
    
  •   41: invokespecial #29                 调用需要特殊处理的实例方法  // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
    
  •   44: new           #18               创建类实例   // class java/lang/String
    
  •   47: dup                          复制栈顶部一个字长内容 
    
  •   48: ldc           #16                常数到操作数栈   // String x
    
  •   50: invokespecial #20               调用需要特殊处理的实例方法   // Method java/lang/String."<init>":(Ljava/lang/String;)V
    
  •   53: invokevirtual #30                调度对象的实例方法   // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
  •   56: invokevirtual #34               调度对象的实例方法    // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
    
  •   59: astore        4                    将将引用类型或returnAddress类型值存入局部变量 
    
  •   61: return
    

}

转载于:https://my.oschina.net/u/2504076/blog/3094931

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值