String它是一个不可变的类,在每次修改String的值的时候都是在创建一个新的变对象,是因为内部的字符数组被final修饰(代表它不可指向新的数组,不代表数组本身的数据不能被改变),它还被private修饰并且String没有暴露和提供任何修改字符数组的方法,获取其底层字符数组时,都是复制一个新数组进行返回,原数组不会受到影响,并且String类还被final修饰了,代表其不可被继承从而杜绝了子类覆盖父类行为的可能。
好处:
保证常量池复用的可靠, String不可变了,字符串常量池才能发挥作用,自变量创建字符串时,字符串常量池会返回已有对象的引用,如果字符串可变那引用的值就可以随时修改并能随时影响到其他的引用,从而数据会发生各种错误
它的哈希码也不可变,因此哈希码只需要计算一遍就可以将其缓存,再用到时就无需计算,性能更高,也才能放心的去使用和哈希计算相关的对象,比如HashMap,HashSet
不可变对象都是线程安全的,不用担心当前使用的对象会被其他线程修改