声明为final,不可被继承,具备不可变性,具体表现为:
此外,当通过字面量的方式给一个字符串赋值,此时的字符串声明在字符串常量池中。
对于Java中的八种基本类型和String类型,Java都提供了常量池的概念。
String Pool是一个固定大小的Hashtable,其中不会存放相同的字符串。若放入的String非常多,则会导致Hash冲突,从而导致链表长度较长,从而影响插入和查找效率。
JDK6之前,字符串常量池存放在永久代中;JDK7之后,将字符串常量池调整到堆中。
如果不是用双引号声明的String对象,那么使用String提供的intern方法,intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。
intern()方法是确保字符串在内存中只有一份拷贝,这样便可节省内存空间,而这个值将会被存放在字符串内部池中。