提及Java中StringBuilder和StringBuffer的应用于差别,StringBuilder是Java中的一个类,从定义上说他是一个可变字符序列,在功能上与StringBuffer较为接近,也是一个兼容性较好的API,常常在字符缓冲区和单线程中使用。StringBuilder的概念首先在C#中出现,后来被引入Java中;但在Java中自己具的功能类似的类是StringBuffer,功能在于对字符串进行存储和操做,他是一个能够更改的字符串变量。
下面对二者的区别进行比较:程序员
在 StringBuilder 上的主要操做是 append 和 insert 两种方法,方法可重载,可接受的数据类型也没有限制。每重方法都能有效地将给定的数据转换成字符串,以后将该字符串的字符添加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端; insert 方法则在指定的点添加字符。例如,若是 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append(“le”) 将使字符串生成器包含“startle”,而 z.insert(4, “le”) 将更改字符串生成器,使之包含“starlet”。 尚学堂•百战程序员提示,每一个字符串生成器都有必定的容量。当字符串生成器所包含的字符序列的长度未能超出容量,就不用分配新的内部缓冲区。若是内部缓冲区溢出,则此容量自动增大。将 StringBuilder 的实例用于多个线程是不安全的。若是须要这样的同步,而且能够用于在无需建立一个新的字符串对象状况下修改字符串,则建议使用 StringBuffer。
String对象是不可改变的。每次使用 System.String类中的方法之一时,都要在内存中建立一个新的字符串对象,这就须要为该新对象分配新的空间。前面讲过,String做为不可修改的对象,当对String修改会产生一个新的字符串对象,与之相对应的StringBuffer类的对象可以进行屡次修改而且不会产生新的未使用的对象,所以在内存上要优于String对象。
关于StringBuffer对象的初始化,要注意不可将null直接赋予其中:
StringBuffer a=new StringBuffer()
这是初始化其为空值的正确写法,若是想要初始化具备初始值,则可经过:
StringBuffer a=new StringBuffer(‘abc’);
此时其初始值为abc
StringBuffer和String之间的相互转化,但对于StringBuffer而言不可直接强制类型转化。安全
关于二者的比较能够体如今执行速度方面,即StringBuilder执行速度要比 StringBuffer快。二者都是字符串变量,是可改变的对象,当咱们用它们操做字符串,其实是在一个对象上操做的,不须要和String同样建立一些对象进行操做,因而提高了速度。除此以外,StringBuilder是线程非安全的,而StringBuffer是线程安全的。字符串缓冲区被多个线程使用是,JVM不能保证StringBuilder的操做是安全的,虽然他的速度最快,可是能够保证StringBuffer是能够正确操做的。因此相比而言StringBuilder更适合单线程操做。app
以上就是对Java中StringBuilder和StringBuffer的应用于差别的简要对比,但愿能对你学Java有所帮助。
ui