【Java高频面试题大全集】Java 后端面试突击:20 道必问真题精讲(2)String 为什么不可变?有什么用?
·
大家好,这节课我们讲一道Java 面试必考题:
String 为什么不可变?有什么好处?
很多同学只会背:“因为 String 被 final 修饰”,但面试官一追问,就答不上来。这节课我给你最标准、最稳妥的回答。
一、先讲:String 不可变的根本原因
-
String 底层是被 final 修饰的 char 数组(JDK9 以后是 byte 数组)
-
String 类本身也是 final 的,不能被继承
-
没有提供任何修改数组内容的方法
所以:String 对象一旦创建,值就不能改变。我们平时看到的字符串拼接、替换,其实都是新建了一个 String 对象,不是修改原来的。
二、面试官真正想听:不可变有什么好处?
你就按这 4 点说,满分答案:
-
线程安全不可变对象天生线程安全,不用加锁,多线程环境下可以随便用。
-
字符串常量池高效因为不可变,才能放常量池共享,节约内存,不用重复创建对象。
-
哈希值缓存String 会缓存 hashCode,不可变才能保证哈希值不变,所以 HashMap 里用 String 做 key 最合适。
-
安全类加载、用户名、密码、文件路径常用 String,不可变可以防止被意外篡改,更安全。
三、一句话总结(背会这段)
String 不可变,是因为底层数组被 final 修饰,且没有提供修改方法。好处是:线程安全、节省内存、哈希值稳定、更安全。
四、面试官最爱挖的坑
问:String 真的绝对不能改吗?
你可以这样答:反射可以强行修改底层数组的值,但正常开发没人这么用,也不推荐。(能说出这句,面试官会觉得你基础很扎实。)
五、本节课收尾
这道题是面试必考中的必考,把我今天讲的这几点记牢,不管是校招还是社招,这道题你一定能拿满分。
更多推荐




所有评论(0)