gpt4 book ai didi

java - 字符串常量池机制

转载 作者:搜寻专家 更新时间:2023-11-01 01:03:45 25 4
gpt4 key购买 nike

谁能解释 String 的这种奇怪行为?

这是我的代码:

String s2 = "hello";
String s4 = "hello"+"hello";
String s6 = "hello"+ s2;

System.out.println("hellohello" == s4);
System.out.println("hellohello" == s6);

System.out.println(s4);
System.out.println(s6);

输出是:

true
false
hellohello
hellohello

最佳答案

您需要了解 str.equals(other)str == other 之间的区别。前者检查两个字符串是否具有相同的内容。后者检查它们是否是相同的对象"hello"+ "hello""hellohello" 可以在编译时优化为相同的字符串。 "hello"+ s2 将在运行时计算,因此将是一个不同于 "hellohello" 的新对象,即使其内容相同也是如此。

编辑:我刚刚注意到你的标题 - 连同 user3580294 的评论,看来你应该已经知道了。如果是这样,那么可能剩下的唯一问题就是为什么一个被认为是常数而另一个不是。正如一些评论者所建议的那样,将 s2 设置为 final 将改变行为,因为编译器随后可以相信 s2 以相同的方式保持不变 "hello" 是,并且可以在编译时解析 "hello"+ s2

关于java - 字符串常量池机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526375/

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