首页 > Java > java教程 > 为什么在 Java 中重新分配 String 变量不会改变原始字符串的值?

为什么在 Java 中重新分配 String 变量不会改变原始字符串的值?

Patricia Arquette
发布: 2024-12-19 11:55:14
原创
461 人浏览过

Why does reassigning a String variable in Java not change the original string's value?

字符串是不可变的:理解概念

在 Java 中,字符串是不可变的,这意味着它们的内容不能直接修改。然而,当我们观察如下代码时,这个概念可能会令人困惑:

String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);
登录后复制

输出:

a 1-->a  
a 2-->ty
登录后复制

实际发生了什么?

尽管为 a 分配新值,输出显示原始值。这种明显的矛盾是由字符串的不变性引起的。当将新字符串分配给引用变量时,将创建一个新字符串对象,并且引用将更新为指向新对象。原始字符串保持不变。

字符串如何工作

为了更好地理解这一点,让我们探索 String 类的功能:

  • 创建字符串: String str = "knowledge" 创建一个值为“knowledge”的字符串对象,并将引用 str 分配给
  • 分配引用:String s = str 创建一个指向同一个字符串对象的新引用 s。
  • 修改尝试:str = str.concat(" base") 概念上追加“base”到 str,但由于字符串是不可变的,因此会创建一个值为“knowledge base”的新字符串对象,并将引用 str 更新为指向

内存管理和字符串常量池

字符串文字在应用程序中很常见,并且会占用大量内存。为了优化内存使用,Java 虚拟机 (JVM) 维护一个“字符串常量池”来存储所有字符串文字。当遇到字符串文字时,编译器会检查池中是否存在现有匹配项。如果找到,引用将定向到现有字符串,从而避免创建新对象。

不变性的重要性

字符串的不变性在内存中起着至关重要的作用管理。由于对字符串的引用可以指向同一基础对象,因此修改其中一个对象的内容将影响所有引用。因此,不变性确保原始字符串被保留,即使其引用被修改。

String 类的最终性

为了防止可能破坏字符串不变性的覆盖, String 类被标记为最终类。这意味着没有其他类可以继承和修改其行为。

总结

Java 中的字符串是不可变的。当重新分配指向字符串对象的引用变量时,将创建一个新的字符串对象,从而有效地更新引用而不是修改现有对象。不变性对于内存效率和确保指向同一字符串值的引用之间的一致性至关重要。

以上是为什么在 Java 中重新分配 String 变量不会改变原始字符串的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板