gpt4 book ai didi

java - 在此字符串操作期间将创建多少个对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:06 26 4
gpt4 key购买 nike

下面是实例方法中的代码片段

 String x = new StringBuffer().append("a").append("b").append("c").toString()

我的印象是,首先创建新的字符串缓冲区,然后在字符串缓冲区的最后附加一个,同样b和c。之后,stringbuffer 被转换为字符串。因此,根据我创建了 2 个对象(一个用于字符串缓冲区,另一个用于字符串)。正确的?基本上按照我的说法,不会为字符串“a”、“b”、“c”创建任何中间对象。这样对吗?

编辑:- 根据所有回复,看起来对象将为字符串文字“a”、“b”、“c”创建但是如果我通过链接 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html#toString (), 这不应该创建临时字符串。搜索“总的来说,这避免了创建许多临时字符串。”在这个链接上。同意它适用于 1.4.2,但我希望 1.6 的基本原理保持不变

是的,如果我在下方而不是上方进行操作,将创建五个对象。三个代表“a”,“b”,“c”。一个用于字符串缓冲区。然后最后 for string 转换自字符串缓冲区。 “a”、“b”、“c”和最后的字符串“abc”的对象将进入池中,并在整个生命周期中存在

String str1="a";
String str2="b";
String str3="c";
String x = new StringBuffer().append(str1).append(str2).append(str3).toString()

以上理解是否正确?

最佳答案

就创建的对象数量而言,第一段和第二段没有区别。字符串 "a""b""c" 将参与该过程,尽管它们的interned可以使用副本。在没有对 str1..str3 的进一步引用的情况下,编译器可以自由地将您的第二个片段转换为您的第一个片段,从而消除变量。

此外,如果其内部字符串中的内存不足以容纳要追加的数据,则 StringBufferappend 内部可能会进行内部重新分配。这只是理论上的可能性,但确实存在。

关于java - 在此字符串操作期间将创建多少个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673596/

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