gpt4 book ai didi

java - 在 Java 中实习字符串

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:46 27 4
gpt4 key购买 nike

以下代码段实习一个字符串。

String str1="my";
String str2="string";
String concat1=str1+str2;
concat1.intern();

System.out.println(concat1=="mystring");

表达式 concat1=="mystring" 返回 true 因为 concat1 已被保留。


如果给定字符串 mystring 更改为 string,如以下代码段所示。

String str11="str";
String str12="ing";
String concat11=str11+str12;
concat11.intern();

System.out.println(concat11=="string");

比较表达式 concat11=="string" 返回 falseconcat11 持有的字符串似乎没有被保留。我在这里忽略了什么?

我已经在 J​​ava 7 更新 11 上进行了测试。


编辑:

完整代码:

package test;

public final class Test
{
public static void main(String... args)
{
String str11="my";
String str12="string";
String concat11=str11+str12;
concat11.intern();
System.out.println(concat11=="mystring");

String str1="str";
String str2="ing";
String concat1=str1+str2;
concat1.intern();
System.out.println(concat1=="string");
}
}

最佳答案

如果您在同一程序中运行这两个片段,则 concat1.intern() 会将 concat1 添加到驻留字符串池中。但是 concat11.intern() 不会向池中添加任何内容,因为 "string" 已经在池中(来自 str2)。因此,您最后的比较是将 concat11str2 进行比较 - 它们不是同一个对象。

来自 http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/String.html 的 Javadoc

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

关于java - 在 Java 中实习字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com