gpt4 book ai didi

JAVA关于String的对象转义

转载 作者:行者123 更新时间:2023-12-02 00:44:13 25 4
gpt4 key购买 nike

我最近研究了java中的对象转义并对以下代码感到困惑,

public static StringBuffer newStringBuffer(String s1, String s2) {
StringBuffer sb = new StringBuffer();
sb.append(s1);
sb.append(s2);
return sb;
}

我知道“sb”从该方法中转义,但我不明白,为什么该代码可以像下面这样优化,

public static String newStringBuffer(String s1, String s2) {
StringBuffer sb = new StringBuffer();
sb.append(s1);
sb.append(s2);
return sb.toString();
}

sb.toString()不能转义?谢谢。

最佳答案

“Escape”表示对象在方法调用之外可见。如果编译器在逃逸分析过程中发现该对象在方法调用之外不可见,则可以执行优化,例如不将本地对象放入堆上,这可以减少垃圾收集的需要。

通常,当您使用 StringBuffer 时,有时您会要求它提供一个 String。如果该方法返回 String 而不是 StringBuffer,则堆上可能会少放一个对象

顺便说一句,另一个优化是使用StringBuilder而不是StringBuffer。前者放弃了后者提供的线程安全性,以获得更高的速度。许多字符串连接都是在单个线程上执行的,因此不需要线程安全。

关于JAVA关于String的对象转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912036/

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