关于Javadoc的内容String.intern()
不多。(简而言之:它返回字符串的规范表示形式,从而允许使用来比较内部字符串==)
String.equals()
?String.intern()
吗?我何时会使用此函数来支持String.equals()
当你需要速度时,因为可以按引用比较字符串(==比等于快)
是否有Javadoc中未提及的副作用?
主要的缺点是你必须记住要确保实际上要对要比较的所有字符串进行intern()。忘记intern()所有字符串很容易,然后你会得到令人困惑的不正确结果。另外,为了大家的缘故,请确保非常清楚地记录你所依赖的字符串是内部化的。
如果决定内部化字符串的第二个缺点是intern()方法相对昂贵。它必须管理唯一字符串池,因此它需要做很多工作(即使字符串已经被内部化了)。因此,在代码设计中要格外小心,例如,在输入时使用intern()例如所有合适的字符串,这样就不必再担心它了。
(来自JGuru)
第三个缺点(仅限Java 7或更低版本):实习字符串生活在PermGen空间中,通常很小。你可能会遇到带有大量可用堆空间的OutOfMemoryError。
问题内容: 该方案。我在写与游戏相关的代码。在该游戏中,(同时也是一个类)具有的列表。有迹象表明,从继承其他类型的项目,例如,或。 显然,拥有我很方便。但是,当我获得玩家物品时,我唯一可以区分哪种物品的方法就是使用关键字。我确信我已经读过,依赖它是不好的做法。 在这种情况下可以使用吗?还是我应该重新考虑我的所有结构? 问题答案: 假设我正在写一些库存代码: 这样可以编译并正常工作。但是它错过了面向
问题内容: 在企业应用程序中使用MS SQL Identity是否是好的做法?在创建业务逻辑以及将数据库从一个迁移到另一个时,难道不是很困难吗? 问题答案: 是的,它们工作得很好,可靠,性能最佳。与不使用身份字段相比,使用身份字段的一大好处是它们可以处理多个调用方尝试保留新ID的所有复杂的并发问题。这看起来似乎是微不足道的代码,但事实并非如此。 以下这些链接提供了一些有关身份字段以及为什么应尽可能
问题内容: 我有一个枚举: 使用方法检查枚举成员之间的“层次结构” 是否存在问题?我的意思是-使用它时,除了冗长之外,还有什么缺点吗?将来有人可能会意外更改顺序。 还是做这样的事更好: 问题答案: TLDR:不,您不应该! 如果您参考javadoc中的方法: 大多数程序员都不会使用这种方法。它设计用于复杂的基于枚举的数据结构,例如和。 首先-阅读手册(在这种情况下为javadoc)。 其次-不要编
问题内容: 我发现了这种模式(或反模式),对此我感到非常满意。 我觉得它非常敏捷: 有时我用它的表弟: 我不需要创建人为的元组并计算参数并将%s匹配位置保留在元组中。 你喜欢它吗?您会/会使用它吗?是/否,请解释。 问题答案: 对于小型应用程序和所谓的“一次性”脚本,这是可以的,尤其是@ kaizer.se提到的增强功能和@RedGlyph提到的版本。 但是,对于维护寿命长且维护人员众多的大型应用
问题内容: 我知道关键字存在于Java中。但是我不记得看到使用它的代码。可能我正在使用异常,并在本可以使用的地方登录。在Java中使用关键字是否是一种好习惯? 编辑 :我知道断言通常是一个好习惯。我的问题是,更准确地说,如果在Java中断言的BKM是使用关键字而不是使用异常,日志记录和其他技术。 问题答案: 不使用断言的主要原因是因为默认情况下未启用断言。因此,如果您的条件足够重要而需要断言,则不
问题内容: 我正在开发一个相对较大的Python应用程序,因此我希望保留几种资源,因为可以在多个不同模块中访问全局变量。这些值包括版本号,版本日期,全局配置以及一些指向资源的静态路径。我还包括了一个由命令行选项设置的标志,以便我可以在调试模式下运行应用程序而无需整个环境。 我一直在谨慎地确保要导入的值在程序运行过程中不会发生变化,并且我已将它们记录为不应被触及的全局常量变量。我的代码本质上看起来像