面试官:String为什么被final所修饰

225 阅读1分钟

String的类以及属性value[] 都被final所定义,这是为什么呢?

一、安全性

Java设计师设计出String的时候,应该就已经意识到了String使用的广泛性。

再加上大部分程序员都会对String字符串进行equal()的一系列校验操作,如果String是可变的,在校验过后,如果String内部的值进行了更改,这样就有可能引起系统的崩溃。比如说某些场景下,使用的String的值需要唯一且不可修改的情况下,对这个String进行了修改,这样可能引起线程问题。

二、性能

1.节约内存,常量池容易优化以及管理; 程序员肯定会和String打交道,肯定会使用到,如果100个循环创建100个String,你会觉得还好,到那时高并发下,几千万个String不得撑爆常量池?因此为了减少重复,String不可更改就起到了极大的作用。

2.hash值得唯一性,确保hash的唯一,可以做HashMap的key- value缓存更加高效。

题外话:尽量减少split()的使用,以及拼接的时候别 += 了 ,最好使用StringBuilder.append() 性能更好。