String , StringBuilder StringBuffer 的区别

来源:互联网 发布:如何手机秒杀淘宝商品 编辑:程序博客网 时间:2024/06/03 12:32

引言

String , StringBuilder StringBuffer 的区别,这个问题是面试中经常被问到的经典问题,今天有空,整理下,顺便翻译下国外的一篇文章,以分享给大家,希望对各位有所帮助,也欢迎大家在评论区指出文章不足之处,讨论交流String , StringBuilder StringBuffer 的区别。谢谢各位!

原文来源

如果你英文很不错,还是看原文比较好

Difference Between String , StringBuilder And StringBuffer Classes With Example : Java

译文

Difference Between String , StringBuilder And StringBuffer Classes With Example : Java

今天我们要理解下String , StringBuilder StringBuffer 的区别。并且你会发现在以上提到的类中有微小的区别

String

String 是 不可变的对象(一旦创建 就不能被改变)。String 对象被存储在Constant String Pool中(字符串池)。Java中每一个不变的对象都是线程安全的,这意味着String也是线程安全的。String 不能同时被两个线程使用。

String  demo = " hello " ;//上面的对象被被存储在Constant String Pool中(字符串池),它的值不能被改变
demo="Bye" ;//新的“Bye”字符串在字符串池中被创建,并且被demo 引用//“hello”字符串仍然存在在字符串池,它的值也没有被重新,但是我们失去了对“hello”字符串的引用

StringBuffer

StringBuffer 是可变的,意味着你可以改变对象的值。StringBuffer创建的对象被保存在“堆”上。StringBuffer与StringBuilder有相同的方法,但是StringBuffer中的每一个方法都是同步的,也就是线程安全的。

所以, 它不允许连个线程同时进入同一个方法。一个方法一次只能被一个线程访问。

但是线程安全也有劣势。StringBuilder比StringBuffer更快。

StringBuffer 可以转换成String类型通过 toString 方法。

StringBuffer demo1 = new StringBuffer("Hello") ;// The above object stored in heap and its value can be changed .上面这个对象存储在堆上,其值可以被改变demo1=new StringBuffer("Bye");// Above statement is right as it modifies the value which is allowed in the StringBuffer上面的代码是正确的,并且它修改了StringBuffer的值

StringBuilder

StringBuilder 也是讲创建的对象存储在堆上。主要区别在于StringBuilder是线程不安全的,所以StringBuilder更快一些。

StringBuilder demo2= new StringBuilder("Hello");// The above object too is stored in the heap and its value can be modified//上面这个对象存储在堆上,其值可以被改变demo2=new StringBuilder("Bye"); // Above statement is right as it modifies the value which is allowed in the StringBuilder//上面的代码是正确的,并且它修改了StringBuilder的值

对比

指标 String StringBuffer StringBuilder 存储地 字符串池 堆 堆 是否可变 不可变 可变 可变 线程是否安全 线程安全 线程安全 线程不安全 速度表现 快 较慢 快
1 0
原创粉丝点击