gpt4 book ai didi

java字符串连接和实习

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:18 30 4
gpt4 key购买 nike

问题一

String a1 = "I Love" + " Java";
String a2 = "I Love " + "Java";
System.out.println( a1 == a2 ); // true

String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
System.out.println( b1 == b2 ); // false

在第一种情况下,我知道它是两个字符串文字的串联,因此结果“I Love Java”将被保留,给出结果 true。但是,我不确定第二种情况。

问题2

String a1 = "I Love" + " Java"; // line 1
String a2 = "I Love " + "Java"; // line 2

String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
String b3 = b1.intern();
System.out.println( b1 == b3 ); // false

上面返回false,但是如果我注释掉第1行和第2行,它返回true。这是为什么?

最佳答案

问题的第一部分很简单:Java 编译器将多个字符串文字的串联视为单个字符串文字,即

"I Love" + " Java"

"I Love Java"

是两个相同的字符串文字,它们被正确地驻留。

相同的驻留行为适用于字符串的+=操作,所以b1b2是实际上是在运行时构建的。

第二部分比较棘手。回想一下,b1.intern() 可能会返回 b1 或与其相等的其他一些 String 对象。当您保留 a1a2 时,您会从对 b1.intern() 的调用中得到 a1。当您注释掉 a1a2 时,没有要返回的现有副本,因此 b1.intern() 返回给您 b1 本身。

关于java字符串连接和实习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45165496/

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