'+' 是否在堆中创建新对象?

当我运行此代码时


String a="sa";

String s = "s";

String b=s + "a";

System.out.println(b==a);

它打印错误。如何?ba 是新的 String 对象吗?


梵蒂冈之花
浏览 166回答 2
2回答

眼眸繁星

您部分正确,如果表达式不是常量表达式,+运算符将创建一个新String对象。根据 Java 语言规范第 15.18.1 节,(强调我的)§15.18.1 字符串连接运算符 +如果只有一个操作数表达式的类型为String,则在运行时对另一个操作数执行字符串转换(第 5.1.11 节)以生成字符串。字符串连接的结果是对 String 对象的引用,该对象是两个操作数字符串的连接。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。String 对象是新创建的(第 12.5 节),除非表达式是常量表达式(第 15.28 节)。通过常量表达式,它的意思是这样的:"a" + "b" // this will always evaluate to "ab", so it's constant.或者a + bwherea和b被声明final。有关详细信息,请参阅第15.28 节。

临摹微笑

它创建新字符串,因为您正在连接对象实例。如果要使用字符串池中已经存在的字符串,则应与常量表达式连接。在您的情况下,如果您希望 a==b 为真,则应使用实习生,如下所示:String b= (s + "a").intern();System.out.println(b==a);或者您可以使用常量表达式:String b= "s" + "a"System.out.println(b==a);它也打印真
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java