(一)概念

    • java.lang.String类用于描述字符串,Java程序中所有的字符串字面值都可以使用该类的对象加以描
      述,如:”abc”。
    • 该类由final关键字修饰,表示该类不能被继承。
    • 从jdk1.9开始该类的底层不使用char[]来存储数据,而是改成 byte[]加上编码标记,从而节约了一
      些空间 。
    • 该类描述的字符串内容是个常量不可更改,因此可以被共享使用。

    (二)常量池
    由于String类型描述的字符串内容是常量不可改变,因此Java虚拟机将首次出现的字符串放入常量
    池中,若后续代码中出现了相同字符串内容则直接使用池中已有的字符串对象而无需申请内存及创建对
    象,从而提高了性能。

    考点:

    • 是唯一一个,既可以new对象,又可以直接赋值的类。

    区别: 前者创建两个对象,一个在堆区,一个在常量池
    后者只产生一个对象,在常量池(若内容相同,则都使用同一个对象,不再新建)
    image.png

    • 常量有优化机制,变量没有

    image.png