【发布时间】:2018-01-04 20:42:37
【问题描述】:
我经常看到有人说String str = new String("my string") 比写String str = "my string", 效率低,因为前者创建了一个静态“my string” 对象,然后new 是一个从静态对象复制而来的String 对象.
但是,鉴于这里的语言是如此简单和明确,我很难想象 Java 优化器不会花任何精力将前者简单地转换为后者。为什么它真的会选择更费力的方式呢?如果 Java 确实对其进行了优化,会有什么负面影响?
【问题讨论】:
-
将实习字符串描述为“静态”实际上并不准确,因为它们不属于任何给定的类。无论如何,对象不是“静态的”或“实例级的”,只有对它们的引用才是。
-
确实简单明了:根据语言规范,调用构造函数must create a new object。您提议的优化将违反该规则。
标签: java string optimization