java中字符串类型——String、StringBuffer和StringBuilder

Java中有3个常用的处理字符串的类:java.lang.String、java.lang.StringBuffer 和 java.lang.StringBuilder。这三个类的相同之处在于都是final类,不允许被继承。
[b][color=red]
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)[/color][/b]
一般来说,在速度上,[color=red][b]StringBuilder>StringBuffer>String[/b][/color]


String实现了3个接口:Serializable、Comparable<String>、charSequence,而StringBuffer和StringBuilder只实现了两个接口Serializable、charSequence。String的实例了通过compareTo方法进行比较,其他两个的实例不可以。


String是字符串常量,即不可改变的对象。这时,你的脑海中可能产生这样的疑问,“不是吧,下面这段代码明明就是改变了String类型的值呀”

String str="abc";
str = str+1;
System.out.print(str); //输出为:abc1


其实这时一种欺骗,java是这样解析这段代码的:首先创建一个str,将“abc”赋值给str,然后再创建一个新的str,将abc1赋值给新的str,原来的str会变成来及被GC回收。所以说,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新放入String对象,以包含修改后的字符串内容,而最初的String丝毫未动。因此,在字符串的值经常被修改的情况下,最好不要使用String类型,否则效率会很低。


下面说说StringBuffer和StringBuilder,这两个类基本上差不多,最主要的区别是StringBuffer是线程安全的,在多线程的情况下不用考虑同步的问题。而StringBuilder是非线程安全的。因此在多线程的情况下,需要考虑同步问题。正因为StringBuilder本身不考虑同步的问题,因此StringBuilder的速度要快于StringBuffer,所以在单线程的情况下,优先考虑StringBuilder。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值