zoukankan      html  css  js  c++  java
  • 为什么String要用final修饰

    String被final修饰

    从 String 类的源码我们可以看出 String 是被 final 修饰的不可继承类,源码如下:

    public final class String 
    
    	implements java.io.Serializable, Comparable<String>, CharSequence { ...... }
    

    那这样设计有什么好处呢?

    Java 语言之父 James Gosling 的回答是,他会更倾向于使用
    final,因为它能够缓存结果,当你在传参时不需要考虑谁会修改它的值;如果是可变类的话,则有可能需要重新拷贝出来一个新值进行传参,这样在性能上就会有一定的损失。

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

    总结来说,使用 final 修饰的第一个好处是安全;第二个好处是高效,以 JVM 中的字符串常量池来举例,如下两个变量:

    String s1 = "java";
    
    String s2 = "java";
    

    只有字符串是不可变时,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提高程序的运行效率,如下图所示:

    image

    试想一下如果 String 是可变的,那当 s1 的值修改之后,s2 的值也跟着改变了,这样就和我们预期的结果不相符了,因此也就没有办法实现字符串常量池的功能了。

  • 相关阅读:
    LeetCode344. 反转字符串
    LeetCode59. 螺旋矩阵 II
    LeetCode209. 长度最小的子数组
    LeetCode383. 赎金信
    cannot be cast to javax.servlet.Servlet
    求组合
    数据库系统概论王珊第四版 答案
    数据库复习
    dfs-bfs
    dfs
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/13495260.html
Copyright © 2011-2022 走看看