Java中String、StringBuilder、StringBuffer的区别
来源:互联网 发布:淘宝二合一口令 编辑:程序博客网 时间:2024/06/05 20:43
Java中String、StringBuilder、StringBuffer是我们再熟悉不过的类型了,那么它们之间到底有啥区别呢。
首先,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:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_1 16: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: ldc #7 // String def 21: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/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/PrintStream; 36: aload_2 37: invokevirtual #11 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 40: return}
在12到21行编译器将String转换为StringBuilder,这样做就是为了更高效。
0 0
- JAVA中String、StringBuffer、StringBuilder的区别
- Java中String,StringBuffer,StringBuilder的区别?
- JAVA中String、StringBuffer、StringBuilder的区别
- java中String、StringBuilder、StringBuffer的区别
- 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、StringBuffer、StringBuilder的区别
- java中String、StringBuffer、StringBuilder的区别
- java中String、StringBuffer、StringBuilder的区别
- java中String、StringBuffer、StringBuilder的区别
- iOS ——微信支付
- 习艺先习德01
- 如何彻底卸载,安装和启动ssh服务
- Gson 的简单使用
- 文件传输原理,与二进制、字节、字符理解
- Java中String、StringBuilder、StringBuffer的区别
- 按数字大小排序 取得最大值或最小值
- 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群
- 进入分析代码模式
- 【Guava】Guava介绍
- spring搭建所需要的jar包汇总详解
- 02 CSS-继承和层叠
- 看病要排队!(优先队列
- 押注零售业务弯道超车 线上渠道成城商行命脉