String、StringBuffer、StringBuilder
String和StringBuffer有什么区别
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
解释:
在Java中,String类被设计为不可变类,这意味着一旦一个String对象被创建以后,它的值是不可改变的。虽然String类提供了一些方法,例如concat()、substring()、replace()等,看起来可以改变其序列,但实际上这些方法并不会修改String对象本身的值,而是返回一个新的String对象。
当我们调用String类提供的方法修改字符串时,实际上是创建了一个新的String对象,并将修改后的字符串赋值给这个新对象。原来的String对象仍然保持不变,这就是为什么String对象是不可变的。例如,下面的代码:
String s1 = "Hello";
String s2 = s1.concat(" World");
StringBuffer和StringBuilder有什么区别
StringBuffer、StringBuilder都代表可变的字符串对象,它们有共同的父类 AbstractStringBuilder,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。一般情况下,要创建一个内容可变的字符串,建议优先考虑StringBuilder类。