String,StringBuffer,StringBuilder

这三者的区别主要有两方面:运行速度和线程安全

String

String 不是Java的基本数据类型,String类的定义:

public final class String extends Object()

1.通过定义可以看出,String类是final定义,所以不可以被继承
2.String值不能修改,因此,当编辑String变量内容时,实际上是新建一个String类型变量,然后将String指向新的地址。

String str = "abc";
str+="de";

在上述代码中,首先创建对象str,值为abc,然后第二步重新创建一个对象值为abcde,然后将新对象地址赋给str,并且将第一个对象通过GC回收。

String str = "abc" + "de";
String str1 = "abcde";

上述两行代码的执行效率相同,第一行不会创建两个对象

String str = "abc";
String str1 = new String("abc");
String str2 = "abc";

上述三行代码中,第一行和第二行值虽然相同,但内存地址却不同,因为new String()会新建一个对象。
第一行代码和第三行代码的值相同,地址也相同,因为在个str2赋值时,会先找是否有值为“abc"的对象,如果有则将地址赋给str2,如果没有则新建。
总结:当需要重复修改内容时,String的效率最低。

StringBuffer

StringBuffer

  1. StringBuffer可以new StringBuffer(),在构造函数中,可以直接给出大小,也可以直接给出要赋的值
  2. StringBuffer对象的值可以直接通过append进行增加,所以相比String,少了新建对象和垃圾回收,因此效率更高
  3. StringBuffer在初始化时,如果没有指定大小和值,会有个初始大小为10;如果最终要增加的值较大时,最要在初始化时估算一个大小进行初始化,以减少扩容次数。
  4. StringBuffer的方法有synchronized修饰,因此是线程安全的
    总结:由于StringBuffer对象内容可以修改,因此当重复修改内容时,StringBuffer的效率远高于String,但由于有同步锁,因此效率可能低于StringBuilder。

StringBuilder

StringBuilder和StringBuffer大致相同,但他没有synchronized,所以不是线程安全,效率也最好,但由于不是线程安全,因此在多线程操作时应注意使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值