一、String类

  1. String声明为final 不可被继承
  2. String实现了Serializable接口: 表示字符串是支持序列化的
  3. String实现了Comparable接口: 表示String可以比较大小
  4. String内部定义了final char[] value 用于存储字符串数据
  5. Sting代表不可变的字符序列 简称不可变性
    1. 体现1: 当对字符串重写赋值时 需要重写指定内存区域赋值 不能使用原有value进行赋值
    2. 体现2: 当对现有字符串进行链接操作时 也需要重写指定内存区域进行赋值 不能使用原有value赋值
  6. 通过字面量(非new)方式给一个字符串赋值 此时的字符串值声明在方法区的字符串常量池中
  7. 字符串常量池中不会存储相同内容的字符串
  8. 常量与常量的拼接结果在常量池 常量池中不会存在相同内容的常量
  9. 只要其中一个是变量 结果就在堆空间中
  10. 如果拼接结果调用intern() 返回值在常量池中

三十一、常用类 - 图1

  1. /**
  2. * 创建人:LYY
  3. * 创建时间:2022/4/30
  4. */
  5. public class StringTest {
  6. public static void main(String[] args) {
  7. String s1 = "hello";
  8. String s2 = "world";
  9. // s3 地址值指向堆空间
  10. String s3 = s1 + s2;
  11. // s4 地址值指向常量池
  12. String s4 = "hello" + "world";
  13. String s5 = s1 + "world";
  14. // 调用intern() 地址值指向常量空间
  15. String s6 = ("hello" + s2).intern();
  16. // false s3地址值指向堆空间 s4地址值指向常量池
  17. System.out.println(s3 == s4);
  18. // false s3地址值指向堆空间 s5地址值指向堆空间 两个不同的对象
  19. System.out.println(s3 == s5);
  20. // true 两个变量的地址值都指向常量空间 常量池中不会存在相同的字符串 因此共用同一地址
  21. System.out.println(s4 == s6);
  22. }
  23. }