String常用操作
1) 拼接: 使用+运算符。
2) 查找类:
charAt(int index),查找指定下标的字符。
indexOf(),查找指定的字符、字符串在原字符串中第一次出现的下标位置,找不到返回-1。
lastIndexOf(),查找指定的字符、字符串在原字符串中最后第一次出现的下标位置,找不到返回-1。
startsWith(),判断当前字符串是否以指定的字符串开始。
endsWith(),判断当前字符串是否以指定的字符串结束。
3) 修改类:字符串是常量,不可修改的,所有的修改操作都会创建一个新的字符串。
subString(),截取字符串,
replace(),替换字符、字符串。
toUpperCase(),将所有字母全部变成大写。
toLowerCase(),将所有字母全部变成小写。
4) 长度:length(),获取字符串中字符的数量。
5) 比较:equals(),比较两个字符串是否表示的是相同的字符序列。
StringBuilder类
StringBuilder类是用来表示可变字符串的,表示字符序列的数组不是final,当StringBuilder中的字符数量超出容量时,字符序列数组会自动扩容。
源码研究:
1) 无参构造方法,创建的可变字符串初始容量是16。
2) 有参数构造,可以指定初始容量。
3) 如果传递的是字符串,初始容量=字符串的长度+16。
4) 当追加字符序列,如果容量不够,会扩容。
扩容容量 = 2n + 2; (n<<1 + 2) n代表扩容前的容量大小。
如果还不够,扩容容量 = 最小容量需求。
StringBuffer类
功能与StringBuilder基本一致,除了这个类是线程安全的。效率略低。
在每一个操作方法前加synchronized关键字。
String str1 = "Java";
String str2 = "Java";
System.out.println(str1.equals(str2));
System.out.println(str1 == str2); // str1 与str2 指向同一个对象。
String str3 = new String("Java"); // new是去堆中创建一个新的对象。
System.out.println(str1 == str3); // 指向不同的对象
String str4 = "Ja" + "va"; // 纯常量的运算在编译时运算,str4 = "Java";
System.out.println(str1 == str4);
String str5 = "Ja";
String str6 = str5 + "va"; // 不是纯常量的运算,只能在运行时执行。
// 这里会创建一个新的对象
System.out.println(str1 == str6); //