String StringBuilder StringBuffer 的区别

String 字符串常量

StringBuilder 字符串变量

StringBuffer 字符串变量

区别:

第一、由上面就可以知道,String字符串常量是不可变长的,StringBuilder和StringBuffer变量是可变长的

 误区:

package com.lanqiao.facetest;

public class TestString {
	public static void main(String[] args) {
		String s = "abc";
		String s1 = "opq";
		s = s+"d";
		System.out.println(s);
		s.concat("4");
		s1.toUpperCase();
		System.out.println(s);
		System.out.println(s1);
	}
}

看到了代码可能有些和我一样基础不牢的人以为结果是:

abcd  

abcd4  

OPQ

其实真正的结果是:

abcd
abcd
opq

也许有人会问,不是说String 不是不可变的常量吗,这道题不合理呀?

         答:String的确不可变的(仅拿String s来讨论),这段代码的在JVM中是这样运行的,先是创建了String的一个变量s,然后在创建另一个s变量来接收s+“d”,原来的s变量会被JVM垃圾处理机制(gc)回收掉。所以每次对字符串进行操作时,JVM都会创建一个新的String对象,因此String的运行效率是比较低的。而StringBuilder和StringBuffer是可变长的,对他们操作JVM不会创建新的对象。


第二,运行速度:StringBuilder>StringBuffer>String

          为什么String的运行速度最慢呢?原因:上面已经解释了,对String的操作JVM会创建一个新的对象,所以String比较慢

第三、 StringBuilder和stringBuffer

       StringBuilder 线程不安全

StringBuffer 线程安全

总结使用:

        String一般用在少量数据操作上

StringBuilder 用于单线程大量数据的操作上

StringBuffer 用于多线程的大量数据的操作上


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值