String是一个常量,一旦我们创建就没有办法改变它的值(不考虑反射特殊场景)
底层是
private final char value[];
private int hash; // Default to 0
修饰的一个数组
1.利用常量池的特性,达到复用,节省内存空间,比如S1和S2的值相同,那么会指向同一个常量
2.用作HashMap的k的时候,k有一个最重要的特性就是不可变
3.缓冲hashcode,在java中很多地方都会使用到,所以在String创建的时候就会计算hashcode值,然后保存在hash上,使用的时候直接取,提高效率
4.线程安全,因为不可变,所以天然的保证线程安全