【问题标题】:java 6 call string intern method a good idea at app start up?java 6调用字符串实习生方法在应用程序启动时是个好主意吗?
【发布时间】:2013-08-23 10:11:49
【问题描述】:

好主意:

 "".intern();

在启动时的企业应用程序中(一次,就像在第一个 servlet 初始化中一样?)所以所有具有空字符串值的后续字符串都是相同的引用?

更进一步,在 50-80 个字符串上调用实习生会有显着的收益,我们知道这些字符串将在此应用程序中大量使用(从数据库或资源文件加载 - 我们知道只有少数字符串可以自定义,但一次为安装定制,很少更改)?

【问题讨论】:

  • 你为什么不用String.Empty
  • 您的 Styring 在哪个包装中?还是java 7? java 6 找不到 String.Empty * 其他常用的字符串呢 - 对它们调用实习生是一种习惯吗? @jeroen-vannevel
  • 字符串常量已经被实习了,所以你至少不需要为那些调用intern()
  • 将字符串定义为常量应该更容易(public static final String ....)
  • 有些来自数据库 - 用户可以更改,但一个特定的表不会有太大变化

标签: string java-6 lang


【解决方案1】:

实习空字符串(或任何其他字符串)并不能保证后续实例将使用相同的对象,除非你也实习他们。

如果两个字符串是 equals() 并且 两者 都已被实习,则合同是 2 个字符串引用同一个对象(因此是 ==)。

除了实习是有成本的,每个intern() 都意味着在池中搜索。

【讨论】:

    【解决方案2】:

    不似乎不是一个好主意。它不像这样工作。看 Is it good practice to use java.lang.String.intern()?

    尤其是@GlenBest cmets 在这个答案上:https://stackoverflow.com/a/1091081/520567

    简而言之,您一无所获,因为无论如何您的源代码中的常量字符串都会被实习,并且您需要在程序执行期间实习任何出于任何原因想要实习的动态字符串。

    【讨论】:

    • 谢谢,两个答案都很有用。我现在看到我只需要返回我们现在正在做的同一个 String 对象。
    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2019-10-19
    • 2014-03-17
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多