Java 字符串的不可变性 Java 语言中,String 类型是不可变的,这一点毫无疑问。那么,为什么 Java 语言的设计者要把 String 类型设计成不可变对象呢?下面,我们将深入探讨字符串不可变性的原因和优点。 不可变对象的定义 不可变对象指的是对象创建之后,对象的内部状态以及对象的内存指针地址都不可以被改变。在 Java 中,final 关键字就是用来辅助创建不可变对象的。 String 类型的不可变性 String 类型的底层是由 final 修饰的 char 数组存储。String 能被设计成不可变类型的一个重要原因是因为它是编程语言里面使用频率最高的一种类型。 缓存 String 的不可变性带来了缓存的优点。在 JVM 的运行时数据区域里面,有一个专门的字符串常量池用来存储字符串字面量。这样可以避免重复创建对象,节省了内存空间。此外,由于字符串的不可变性,从而可以让其 hashCode 也被缓存,在 Java 里面哈希类数据结构如 HashMap, HashTable,HashSet 其 key 用的最多的基本都是 String 类型,如此一来 key 的 hashCode 的也可以在第一次调用之后被缓存,之后直接使用无须重新生成,从而间接的提升访问效率。 安全 String 的不可变性也能够减少了应用程序在运行时间的安全问题。如果 String 可变,那么攻击者就可以在通过检查验证之后,再改变查询的用户名,那么就会存在安全风险,而不可变性能够避免和减少这一情况。 同步 由于 String 类型的不可变性,使得 String 对象可以安全的在多个线程之间传递和访问,也就是说你在多线程中是不能改变字符串本身的值,而是在堆里面新创建一个字符串然后操作。 性能 String 的不可变性带来了性能的优点。例如,字符串的常量池节省内存,缓存 Hash 类以字符串做 key 数据结构的 hashCode,从而提高访问性能等。由于字符串是编程语言里面最广泛使用的数据结构,所以针对字符串的不可变性带来的优势,可以放大到整个运行的应用程序,从而带来应用程序整体的性能提升。 String 类型的不可变性是 Java 语言的一个重要特性,它带来了缓存、安全、同步和性能等多个优点,对于 Java 开发者来说非常重要。
- 粉丝: 3
- 资源: 907
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助