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,一可以减少性能损失,二可以一定程度上保证安全性

相关文章

  • 基础与框架-java面试

    1、String类能被继承么?不能,因为String类被final修饰符修饰,final修饰的类不能被继承; 2、...

  • Java基础知识整理-String类

    先思考下以下问题: 1.String类能被继承吗? String类被final修饰符所修饰,被final修饰符所修...

  • Java中的String类能否被继承?为什么?

    不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。 Java对String类的...

  • 基础知识

    1、String类能不能被继承?为什么?答:不能因为string类是被final修饰的类,final修饰过的类不能...

  • Java系列之 - String、StringBuilder、S

    String final修饰的String 类,以及final修饰的char[] value,表示String类不...

  • 2021最新Java面试题(基础)

    1、String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继...

  • Java常见面试题

    1.String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继...

  • String被final修饰

    源码: 为什么String被final修饰? String str = "test"; 给String变量对象赋值...

  • final,finally,finalize的区别

    一、final final可以用来修饰类、方法、变量。final修饰类则该类不能被继承扩展。如String就是fi...

  • 面试宝典一

    1.是否可以继承String类.不可以,因为string类有final修饰,final修饰的类不可以被继承,实现细...

网友评论

    本文标题:String被final修饰

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