当前位置:  首页>> 技术小册>> Java语言基础9-常用API和常见算法

① 字符串 String 类型本身是 final 修饰的,意味着我们不能继承 String。
② 字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新的对象。
注意:如果程序中涉及到了大量的字符串的修改操作,那么此时的内存消耗比较高,可能需要考虑使用 StringBuilder 或 StringBuffer 的可变字符序列。
③ String 对象内部是用字符数组保存的。
JDK 9 之前是用 char[] 数组保存的,JDK 9 之后时用 byte[] 数组保存的。

例如:下面的代码是等价的:

  1. String str = "abc";
  1. char[] chs= {'a','b','c'};
  2. String str = new String(chs);
  • ④ String 类中的 char[] values 数组也是用 final 修饰的,意味着这个数组不可变,又因为是用 private 修饰的,意味着外界不能直接操作它。String 类提供的所有方法都是用新对象来表示修改后的内容的,保证了 String 对象的不可变。
  • ⑤ 因为 String 对象设计为不可变,所以 String 有常量池来保存很多常量对象。
    • 常量池在方法区。
    • 常量池的细致划分:
      • JDK 6 及之前:方法区。
      • JDK 7:堆。
      • JDK 8:元空间。
  1. String s1 = "abc";
  2. String s2 = "abc";
  3. System.out.println(s1 == s2); //true
  4. // 内存中只有一个"abc"对象被创建,同时被s1s2所共享

该分类下的相关小册推荐: