• 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())生成字符串进行返回;所有如果在循环中使用“+”拼接字符串将会很耗性能跟内存的。

(整理笔记待完善)