Java中String、StringBuilder、StringBuffer的区别
2016-12-08 12:08
429 查看
Java中String、StringBuilder、StringBuffer是我们再熟悉不过的类型了,那么它们之间到底有啥区别呢。
首先,String类型是不可变的,StringBuilder、StringBuffer是可变的。
其次,StringBuilder与StringBuffer类似,无非就是在单线程的情况下StringBuilder要比StringBuffer快。如果要确保线程安全,那就用StringBuffer。
就这么两点。下面看一段代码感受一下String类型拼接,编译器到底是怎么处理的。
用javap反编译一下上面的class文件
于是得到以下字节码:
在12到21行编译器将String转换为StringBuilder,这样做就是为了更高效。
首先,String类型是不可变的,StringBuilder、StringBuffer是可变的。
其次,StringBuilder与StringBuffer类似,无非就是在单线程的情况下StringBuilder要比StringBuffer快。如果要确保线程安全,那就用StringBuffer。
就这么两点。下面看一段代码感受一下String类型拼接,编译器到底是怎么处理的。
package strings; public class Concatenation { public static void main(String[] args) { String mango = "mango"; String s = "abc" + mango + "def" + 47; System.out.println(s); } } /* Output: abcmangodef47
用javap反编译一下上面的class文件
javap -c Concatenation.class
于是得到以下字节码:
Compiled from "Concatenation.java" public class strings.Concatenation { public strings.Concatenation(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: ldc #2 // String mango 2: astore_1 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."<init>": ()V 10: ldc #5 // String abc 12: invokevirtual #6 // Method java/lang/StringBuilder.append:(L java/lang/String;)Ljava/lang/StringBuilder; 15: aload_1 16: invokevirtual #6 // Method java/lang/StringBuilder.append:(L java/lang/String;)Ljava/lang/StringBuilder; 19: ldc #7 // String def 21: invokevirtual #6 // Method java/lang/StringBuilder.append:(L java/lang/String;)Ljava/lang/StringBuilder; 24: bipush 47 26: invokevirtual #8 // Method java/lang/StringBuilder.append:(I )Ljava/lang/StringBuilder; 29: invokevirtual #9 // Method java/lang/StringBuilder.toString: ()Ljava/lang/String; 32: astore_2 33: getstatic #10 // Field java/lang/System.out:Ljava/io/Prin tStream; 36: aload_2 37: invokevirtual #11 // Method java/io/PrintStream.println:(Ljav a/lang/String;)V 40: return }
在12到21行编译器将String转换为StringBuilder,这样做就是为了更高效。
相关文章推荐
- JAVA中String与StringBuffer 、StringBuilder的区别
- 理解java String,深入解析StringBuffer和StringBuilder的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- JAVA中String与StringBuffer,StringBuilder应用的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- java语言中String,StringBuffer,StringBuilder的区别
- Java笔记—String,StringBuffer ,StringBuilder 的区别
- JAVA中String与StringBuffer 、StringBuilder的区别
- Java之String、StringBuffer、StringBuilder的区别
- JAVA---------------String,StringBuffer与StringBuilder的区别??
- Java中String、StringBuilder和StringBuffer的区别
- 【Java基础】String,StringBuffer,StringBuilder之间的区别
- Java中String,StringBuilder和StringBuffer的区别
- JAVA中String与StringBuffer 、StringBuilder的区别
- Java中String,StringBuilder和StringBuffer的区别
- 【java面试题】StringBuilder与StringBuffer和String 的区别
- Java中String, StringBuffer 和 StringBuilder 三个类的区别和联系
- JAVA中String与StringBuffer 、StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- Java之String、StringBuffer、StringBuilder的区别分析