gpt4 book ai didi

java - 我是否正确地实习了我的字符串?

转载 作者:搜寻专家 更新时间:2023-11-01 00:59:30 24 4
gpt4 key购买 nike

我想确保我不会破坏 permgen 空间,所以我小心地保留我的字符串。

这两个语句等价吗?

String s1 = ( "hello" + "world" ).intern(); 

String s2 = "hello".intern() + "world".intern();

更新

我提出问题的方式与实际应用完全不同。这是我使用实习生的方法。

public String toAddress( Transport transport )
{
Constraint.NonNullArgument.check( transport, "transport" );

switch( transport )
{
case GOOGLE:
case MSN:
return ( transport.code() + PERIOD + _domain ).intern();
case YAHOO:
default:
return _domain;
}
}
private String _domain; // is initialized during constructor
private static final String PERIOD = ".";

最佳答案

我能想到的最好的建议是:不要打扰。静态声明的 String 无论如何都将位于常量池中,除非您动态创建一个 String 是...错误不,我想不出原因。

我从 97 年开始就使用 Java 编程,但我从未真正使用过 String.intern()

编辑:在看到您的更新后,我真的认为您不应该使用 intern()。您的方法看起来非常正常,几乎没有理由使用 intern()。

我这样做的原因是它感染了一个优化并且可能是一个过早的优化,你是在猜测垃圾收集器。如果 just of you 方法的生命周期很短,那么生成的字符串将很快在下一次次要 GC 中死于年轻一代,如果不是,它将无论如何都会在成熟一代中被实习(因为想要一个更好的词) .

我想这可能是个好主意的唯一情况是,如果您花一些时间使用分析器并证明它对您的应用程序的性能有很大影响。

关于java - 我是否正确地实习了我的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924597/

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