- 节约内存:在多线程环境,可能会定义多个相同的字符串,但指向的是同一个地址中
- 方便其它类使用:set集合中的key可以是字符串,由于字符串变量里面存储的是字符串的地址,如果字符串可变,那么不同的地址可能存储的是相同的字符串,这样就违背了set集合的不能重复性
- 安全可靠:Java内部参数使用了许多String类型的数据,如果String可变,那我们可以随意更改那些内部参数
- 缓存Hashcode:字符串的Hashcode在java中经常配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。不可变的特性保证了hashcode永远是相同的。不用每次使用hashcode就需要计算hashcode。这样更有效率。因为当向集合中插入对象时,是通过hashcode判别在集合中是否已经存在该对象了(不是通过equals方法逐个比较,效率低)。
第4个我没有看懂,以后有机会在看吧!