java.lang.String、java.lang.StringBuffer、java.lang.StringBuilder都是字符串类型,是Java中用于处理字符串常用的三个类。它们主要有以下区别和联系:
联系(相同之处):
三者都是final类,不允许被继承。
由于使用频繁,考虑到性能和安全的原因,防止其中的参数被参数修改影响到其他的应用。
区别:
1)String类是不可变类。
String对象一旦被创建,则包含在这个对象中的字符序列是不可更改的,直到这个对象被销毁。
String实现了三个接口:java.io.Serializable、Comparable<String>、CharSequence
2)StringBuffer类代表一个字符序列可变的字符串。
StringBuilder可以通过append、insert、reserve、setCharAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String类型。
3)JDK1.5新增了一个StringBuilder类,与StringBuilder类似,构造方法和方法基本相同。
不同的是StringBuffer是线程安全的,可以不需要额外的同步用于多线程中;StringBuilder是线程不安全的,运行于多线程中就需要使用单独同步处理,但速度比不上StringBuilder,所以StringBuilder性能略高。在不考虑线程安全的情况下,优先考虑使用StringBuilder。
StringBuilder只实现了两个接口java.io.Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他不可以。
三者的运行速度:StringBuilder > StringBuffer > String。
小结:
1)String:适用于少量的字符串操作的情况。
2)StringBuffer:适用于单线程下在字符缓冲区进行大量操作的情况。
3)StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。