1.String、StringBuilder和StringBuffer
1)是否可变:String类中使用final关键字修饰字符数组来保存字符串,所以String对象是不可变的,而 StringBuilder和StringBuffer是可变的。
2)拼接:String使用字符串拼接时是两个不同的空间,StringBuffer和StringBuilder使用字符串拼接是直接在字符串后追加。
3)线程安全方面:String中的对象是不可变的,也可以理解为常量,线程安全。StringBuffer对方法和调用的方法加了同步锁,所以是线程安全的,而StringBuilder没有加同步锁,所以线程不安全。
4)性能:StringBuffer>StringBuilder>String
总结:操作少量数据使用String;单线程下操作大量数据使用StringBuilder,多线程下操作大量数据使用 StringBuffer。
2.String类不能继承
源码中:类被final修饰
源码中:属性 char 类型的数组
String.toCharArray 生成char类型的数组
3.String常用方法
public class StringClass {
public static void main(String[] args) {
String s1 = "abcde";
String s2 = "fghi";
String upperCase = s1.toUpperCase();
String lowerCase = s1.toLowerCase();
int length = s1.length();
String substring = s1.substring(1, 2);
boolean equals = s1.equals(s2);
int compareTo = s1.compareTo(s2);
String concat = s1.concat(s2);
StringBuffer stringBuffer = new StringBuffer("aabb");
StringBuffer reverse = stringBuffer.reverse();
System.out.println(reverse); //bbaa
StringBuffer replace = stringBuffer.replace(1, 3, s2);
System.out.println(replace); //bfghia
System.out.println(upperCase); //ABCDE
System.out.println(lowerCase); //abcde
System.out.println(length); //5
System.out.println(substring); //b
System.out.println(equals); //false
System.out.println(compareTo); //-5
System.out.println(concat); //abcdefghi
}
}