当前位置: 首页 > 面试经验 >

面试题记录&学习——String类为什么不可变-JDK1.8

优质
小牛编辑
164浏览
2023-03-28

面试题记录&学习——String类为什么不可变-JDK1.8

本人菜鸡,面试题以及答案都是从网络得来,进行加工整理,并不保证正确

原因如下:
    1.底层字符数组采用private final修饰,final修饰表明该引用指向不可变(注意堆中的数组可以改变),private修饰表明该字符数组只对本类可见,且没有提供对应的get/set方法,外部无法访问
    2.所有对字符串更改的方法都设定返回一个新字符串
    3.类的修饰符采用final,表示该类无法被继承,避免了子类破坏
设计者为什么要将String设计成不可变的?
    回答:String类在Java程序中大量应用,比如Map中的key大多是String类型,将String设计成不可变好处之一就是hashcode的值固定(String的hashcode()方法与字符数组中的元素有关,并且获取String类的hashcode值只会调用一次hashcode()方法,结果保存在一个名为hash的变量中,之后相同String类会直接返回hash,提高效率),便于Map的查找。同时String类采用了常量池技术,一个String对象可能有多个引用,如果一个引用修改了字符串对象,则其他的引用会导致数据错误
#Java面试#
 类似资料: