- String的内部实现,用一个value char[]数组来存放数据信息。
- String类中包含的方法:
substring(), 获取子串,返回一个新的字符串。
charAt(intindex), 获取字符串固定位置的字符。
concat(), 连接字符串,内部重新创建了一个新的字符串返回。
join(), 使用特定的字符串连接字符串:String message = String.join("-", "Java", "is", "cool"); ret: "Java-is-cool"; 内部实现使用StringBuilder进行append操作。
split(), 分隔字符串
indexOf(),获取字符第一次出现在字符串中的位置
toUpcase(), 字符串变大写
toLowerCase(), 字符串变小写
matches(), 字符串匹配正则表达式
replace(), 替换字符串
contains(), 判断是否包含某一字符串
endWith(), 是否以参数开头
startWith(), 是否以参数结束
length(), 字符串长度
replaceAll(), 替换所有目标字符
replaceFirst(), 替换首次出现的目标字符串
toCharArray(), 获取字符串的char数组
lastIndexOf(), 获取固定字符最后一次出现在字符串中的位置
compareTo(), 比较字符串
getBytes(), 获取字符串对应的字节数组
- hash方式: h = 0; h = 31 * h + value(i) 循环,返回最终的值。
- StringTable 存在于运行时常量池,又叫String Pool, 是存放String常量的地方;
(1)当给一个变量赋值String值的时候,会先去StringTable里面找,如果找到则直接赋值给该变量,如果没找到,则在StringTable里面添加一个改常量,然后返回给变量名。
(2)String a = new String(“abc”); 会在堆内存中创建一个“abc”的String对象;使用a.intern()方法,如果常量池中存在“abc”字符常量串,则直接返回常量池的对象;如果没有,则会将a的引用地址添加到StringTable中(jdk1.7和之后,1.6复制该对象到StringTable中),下次若使用 String b = “abc”, 去常量池中找,存在a对象的引用,则 b指向的是a的实例对象。
(3)StringTable 是类hashTable 的一个hash表;大小固定,不可扩展的。
- String类是final类型的,是不可变的,类是不能被继承的。
- 用“+”号拼接字符串,编译器会为其创建一个StringBuilder对象,使用append()方法进行字符串拼接,最后用new String(sb.toString())生成字符串进行返回;所有如果在循环中使用“+”拼接字符串将会很耗性能跟内存的。
(整理笔记待完善)