Java -- String类-StringBuffer类-StringBuilder类
String 类:
b.intern():方法返回常量值地址
1. String是一个final类,代表不可变的字符序列
2. 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的
字符串的特性:
1. 编辑器不傻,做一个优化,判断创建的常量池对象,是否有引用指向
2. String a = "hello"+"abc"; =>> String a = "helloabc";
String 类常用的方法:
equals:区分大小写,判断内容是否相等
equalslgnoreCase:忽略大小写的判断内容是否相等
length:获取字符的个数,字符串的长度
indexOf:获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
lastIndexOf:获取字符在字符串对象中最后一次出现的索引,索引从0开始,如果找不到,返回-1
substring:截取指定范围的子串
toUpperCase:转换成大写
toLowerCase:转换成小写
concat:拼接字符串
replace:替换字符串中的字符
split:分割字符串,对于某些分割字符,我们需要转义
toCharArray:转换成字符数组
compareTo:比较俩个字符串的大小,如果前者大,则返回正数,后者大,则返回负数,如果相等,返回0 ; 如果长度相同,并且每个字符也相同,就返回0 ;如果长度相同,或者不相同但是在进行比较时可以区分大小就返回c1-c2;
format:格式字符串
StringBuffer类:
代表可变的字符序列,可以对字符串内容进行增删。很多方法与String相同,但StringBuffer是可变长度的。
String VS StringBuffer
1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高
StringBuffer的构造器:
StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符
StringBuffer(CharSequence seq):
public java.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符
增: s.append(',');
删:s.delete(11,14);
修改:s.replace(9,11,"刘家");
查找指定的子串在字符串第一次出现的案例,如果找不到返回-1
int indexOf = s.indexOf("lk");
System.out.println(indexOf);
插入:s.insert(9,"刘家亮");
长度:System.out.println(s.length());
StringBuilder类:
基本介绍:
1. 一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步(StringBulider不是线程安全),该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。建议优先采用该类,它比StringBuffer要快
2. 在StringBuilder上主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据
常用方法:
StringBuffer和StringBuilder均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样
String ,StringBuffer和StringBuilder的比较:
1. StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2. String:不可变字符序列,效率低,但是复用率高。
3. StringBuffer:可变字符序列,效率较高(增删),线程安全。源码中可以看到synchronized已同步
4. StringBuilder:可变字符序列,效率最高,线程不安全
5. String使用注意事项说明:
string s = “a”;//创建了一个字符串
s+=“b”;//实际上原来的“a”字符串对象已经丢弃了,现在又产生了一个字符串s+“b”。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象残留在内存中,降低效率。结论:如果我们对String做大量修改,不要使用String。
结论:
1. 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
2. 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
3. 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
4. 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息