2019独角兽企业重金招聘Python工程师标准>>>
###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 ABC2: astore_1 3: new #3 // class java/lang/String6: dup 7: invokespecial #4 // Method java/lang/String."<init>":()V
整个过程大致可解释为:
- a. 常量池中创建常量 'ABC';
- b. 栈内存中创建引用
- c. 堆内存中新建String对象,再初始化。
而第二种直接赋值的方式虚拟机运行的结果如下:
0: ldc #2 // String ABC2: astore_1
这里可以很清楚的看出,直接在常量池中创建‘ABC’字符串,指向引用str2
由此可以看出第二种方式明显比第一种更高效。 其实经过测试:
String s = new String("ABC");//等价于下面两步(唯一的区别就是在栈中多了一个指向'ABC'的引用s1)String s1 ="ABC";String s2 = new String(s1);