gpt4 book ai didi

java - Java中的String concat和+运算符之间有区别吗?

转载 作者:行者123 更新时间:2023-12-03 12:31:17 26 4
gpt4 key购买 nike

这个问题已经在这里有了答案:




11年前关闭。




重复

java String concatenation


我很好奇两者之间的区别。
我了解字符串池的方式是这样的:
这将在字符串池中创建3个字符串对象,其中所有这些引用中有2个丢失。
String mystr = "str";
mystr += "end";
这还会在字符串池中创建3个对象吗?
String mystr = "str";
mystr = mystr.concat("end")
我知道在有很多隐喻要做的情况下,StringBuilder和StringBuffer在内存使用方面效率更高。我只是想知道+运算符和concat之间在内存使用方面是否有任何区别。

最佳答案

在这种特殊情况下没有区别; ,但是它们通常并不相同。
str1 += str2等效于执行以下操作:

str1 = new StringBuilder().append(str1).append(str2).toString();

为了向自己证明这一点,只需创建一个简单的方法即可,它使用两个字符串,并将 +=的第一个字符串转换为第二个字符串,然后检查反汇编的字节码。

相比之下, str1.concat(str2)只是简单地创建了一个新字符串,即 str1str2的串联,这对于少量的串联字符串来说比较便宜(但会输给第一种方法,数量更多)。

另外,如果 str1为null,请注意 str1.concat(str2)会引发NPE,但是 str1 += str2会简单地将 str1视为null,而不会引发异常。 (也就是说,它产生的“null”与 str2的值串联在一起。如果 str2是“foo”,则最终会出现“nullfoo”。)

更新:请参见 this StackOverflow question ,这几乎是相同的。

关于java - Java中的String concat和+运算符之间有区别吗? ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693597/

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