饥人谷技术博客

String被final修饰

2020-12-29  本文已影响0人  宇哥996

源码:

为什么String被final修饰?

String str = "test";

给String变量对象赋值,在常量池生成一个常量,栈中有该常量的引用,如果字符串改变,则会copy一个新的值.

原因一: 

        final能够缓存结果,传参时不需要考虑谁会修改它的值,如果是可变类的话,则有可能需要重新拷贝出来一个新值进行传参,这样在性能上就会有损失。

原因二: 

        String设计成不可变的另一个原因是安全,当你在调用其他方法时,例如调用一些系统级操作指令之前,可能会有一系列校验,如果是可变类的话,可能在你校验过后,它的内部的值又被改变了,这样可能会引起严重的系统崩溃问题.

原因三:

        由上述源码可知,String会缓存hashcode,这也是map建议String类型作为key的原因,在一定程度上提高了效率.

总结:

        String被修饰为final,一可以减少性能损失,二可以一定程度上保证安全性

上一篇下一篇

猜你喜欢

热点阅读