java - java中的字符串对象和引用

标签 java string

String str = "Hello"+"World";
String str1 = str + "hello";

创建了多少个对象以及创建了多少个引用?

最佳答案

字符串是一个不可变的对象。每当您操作字符串时,JVM 都会(至少)创建一个新字符串并为其分配新的(连接的)值。

由于您没有指定您只关心 String 对象和引用,因此我们需要讨论 StringBuffers。 StringBuffers(除了 StringBuilders)是一个试图解决字符串不可变性质的类。我们都知道,很多时候我们只需要将两个或多个字符串添加在一起即可。

想象一下这段代码:

String sentence = "the " + "quick " + "brown " + "fox ";

通常,当发生这种情况时,Java 编译器不会创建这些字符串,而是一次一个地将它们添加在一起,然后忘记所有中间字符串。所发生的情况是创建了一个 StringBuffer。然后,使用 StringBuffer.append(String) 添加所有单个字符串,最后返回一个字符串。

您可以肯定地说,创建了 3 个字符串引用,引用内联(和池化)字符串“Hello”、“World”和“hello”。每个引用引用不同的字符串。如果第三个词也是“Hello”(大写 h),情况就会改变。

关于java - java中的字符串对象和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601990/

相关文章:

c# - 字符串比较 : InvariantCultureIgnoreCase vs OrdinalIgnoreCase?

c++ - std::string 通过索引赋值似乎不起作用

PHP合并连续的换行符数量并在必要时减少它?

java - 自定义对象作为映射键

JavaFX Gradle 构建错误,java.util.zip.ZipException : duplicate entry: META-INF/LICENSE

java - 以太坊区 block 链,带有用于非支付应用程序的java api

c - C 判断文件中是否包含字符串

Java:如何在 JFrame 中绘制矩形?

Java 将图像添加到 BLOB 数据字段

c - C 中 char[] 和字符串的区别