一点基础,这位博主写得很好:
https://www.cnblogs.com/jamaler/p/11576754.html
简要概括一下:
1.创建方式:
String str1 ="Hello World";
String str2 = new String("Hello World");
str1 == str2 ????
并不等于,创建str1时,JVM会查找常量池中是否有Hello World对象,若没有则创建并返回引用。若存在,则直接返回引用。
str2 是在编译时,在常量池中创建Hello World变量,new的使用使用常量池中引用,在堆中创建地址。。str2指向的是堆地址。
2.String对象的不可变性
1.String的类被final修饰,因此不可以被继承;
2.用来被存储字符床的value[]被final修饰,因此,String对象一旦被初始化,就不能被修改。
提示一下,String不可变指的是
String对象不可变的几个原因。
1.出于安全考虑若String对象可以被随意修改,那么就有可能被恶意修改。
2.确保hash值不会变化,确保唯一性,保障hashMap等功能的正常实现
3.可以实现字符串常量池