zoukankan      html  css  js  c++  java
  • 为什么 String 在 Java 中是不可变的(终极答案)

    为什么 String 在 Java 中是不可变的(终极答案)

    我们可以从2个角度去看待这个问题:

    1.为什么要设计成不可变
    2.如何保证不可变?
    1.为什么设计不可变?
    1.String对象缓存在String池中,由于缓存的字符串在多个客户之间共享,因此始终存在风险,其中一个客户的操作了一个String对象会影响其他客户。例如,如果一段代码将String "Test" 的值更改为"TEST",则所有其他客户也将看到该值。由于String对象的缓存性能是很重要的一方面,因此通过使String类不可变来避免这个风险。

    2.由于把字符串作为HashMap键很受欢迎。对于键值来说,最重要的是它们是不可变的,以便用它们检索存储在HashMap中的值对象。由于HashMap的工作原理是散列,因此需要具有相同的值才能正常运行。如果在插入后修改了String内容,可变的String将在插入和检索时生成两个不同的hash码,可能会丢失Map中的值对象。

    2.如何保证String不可变

    1.通过final修饰,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等

    2.String是被它被类加载机制使用。通过双亲委派机制保证

     

     

  • 相关阅读:
    错误:Error:未定义标识符"_TCHAR"
    C#中DateTime应用
    随机打乱数组元素
    C++中的运算符重载
    C#中的运算符重载
    C#访问修饰符
    VS2010中将当前选定项目做为启动项
    VS2010 ctrl+F5闪退解决方法
    IntelliSense: 应输入声明的解决方案
    C++数据类型范围
  • 原文地址:https://www.cnblogs.com/pingping-joe/p/11543989.html
Copyright © 2011-2022 走看看