String、StringBuffer、StringBuilder
String和StringBuffer有什么区别
String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append(),insert(),reverse(),serCharAt(),seLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象
StringBuffer和StringBuilder区别
两者都代表可变的字符串对象,他们有共同的父类Abstract StringBuilder,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,StringBuilder是非线程安全的,所以StringBuilder性能略高。一般情况下,要创建一个内容可变的字符串,建议优先考虑StringBuilder类。
字符串拼接的理解
常用的字符串拼接方法
- +:如果拼接的都是字符串直接量,适合+拼接
- StringBuilder:如果拼接的字符串包含变量,并不要求线程安全
- StringBuffer:如果拼接的字符串包含变量,并且要求线程安全
- String类的concat方法:如果只是对两个字符串进行拼接,并且包含变量
两个字符串相加的底层是如何实现的
如果拼接的都是字符直接量,则在编译是编译器会将其直接优化为一个完整的字符串,和直接写一个完整的字符串是一样的
如果拼接的字符串中包含变量,则在编译时编译器会采用StringBuilder对其进行优化,即自动创建StringBuilder实例并调用其append()方法,将这些字符串拼接在一起