大家好,这节课我们讲一道Java 面试必考题

String 为什么不可变?有什么好处?

很多同学只会背:“因为 String 被 final 修饰”,但面试官一追问,就答不上来。这节课我给你最标准、最稳妥的回答。


一、先讲:String 不可变的根本原因

  • String 底层是被 final 修饰的 char 数组(JDK9 以后是 byte 数组)

  • String 类本身也是 final 的,不能被继承

  • 没有提供任何修改数组内容的方法

所以:String 对象一旦创建,值就不能改变。我们平时看到的字符串拼接、替换,其实都是新建了一个 String 对象,不是修改原来的。


二、面试官真正想听:不可变有什么好处?

你就按这 4 点说,满分答案:

  • 线程安全不可变对象天生线程安全,不用加锁,多线程环境下可以随便用。

  • 字符串常量池高效因为不可变,才能放常量池共享,节约内存,不用重复创建对象。

  • 哈希值缓存String 会缓存 hashCode,不可变才能保证哈希值不变,所以 HashMap 里用 String 做 key 最合适。

  • 安全类加载、用户名、密码、文件路径常用 String,不可变可以防止被意外篡改,更安全。


三、一句话总结(背会这段)

String 不可变,是因为底层数组被 final 修饰,且没有提供修改方法。好处是:线程安全、节省内存哈希值稳定、更安全。


四、面试官最爱挖的坑

问:String 真的绝对不能改吗?

你可以这样答:反射可以强行修改底层数组的值,但正常开发没人这么用,也不推荐。(能说出这句,面试官会觉得你基础很扎实。)


五、本节课收尾

这道题是面试必考中的必考,把我今天讲的这几点记牢,不管是校招还是社招,这道题你一定能拿满分。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐