Java String 学习笔记 (一)

原创
2016/07/07 10:40
阅读数 99

###String 简介

String 并非java的8大基本数据类型之一。

java中基本数据类型存储在栈内存中。而String不是,新new的String 对象存储在堆内存中。而字符串存储在常量池中。String对象的引用存储中栈内存中。

String的实例化方式

String对象有两种实例化方式

    String str1 = new String("ABC"); //第一种
    String str2 ="ABC";              //第二种  

第一种new的方式:javap反编译的结果为

       0: ldc           #2                  // String ABC
       2: astore_1      
       3: new           #3                  // class java/lang/String
       6: dup           
       7: invokespecial #4                  // Method java/lang/String."<init>":()V

整个过程大致可解释为:

  • a. 常量池中创建常量 'ABC';
  • b. 栈内存中创建引用
  • c. 堆内存中新建String对象,再初始化。

而第二种直接赋值的方式虚拟机运行的结果如下:

       0: ldc           #2                  // String ABC
       2: astore_1 

这里可以很清楚的看出,直接在常量池中创建‘ABC’字符串,指向引用str2

由此可以看出第二种方式明显比第一种更高效。 其实经过测试:

    String s = new String("ABC");
    //等价于下面两步(唯一的区别就是在栈中多了一个指向'ABC'的引用s1)
    String s1 ="ABC";
    String s2 = new String(s1);
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部