String被final修饰

作者: 宇哥996 | 来源:发表于2020-12-29 12:19 被阅读0次

    源码:

    为什么String被final修饰?

    String str = "test";

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

    原因一: 

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

    原因二: 

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

    原因三:

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

    总结:

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

    相关文章

      网友评论

        本文标题:String被final修饰

        本文链接:https://www.haomeiwen.com/subject/aryfoktx.html