由此生成了多少个 Java 对象 - new String(“abcd”)
String s = new String("abcd");
String s = new String("abcd");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
String s = new String("abcd");
String s = new String("abcd");
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
实习生池中有一个字符串,每次运行代码时都会重复使用该字符串。
然后是每次运行该行时都会构造的额外字符串。例如:
最终会在内存中得到 11 个字符串,其中内容为“abcd” - 被保留的字符串和 10 个副本。
There's one string in the intern pool, which will be reused every time you run the code.
Then there's the extra string which is constructed each time you run that line. So for example:
will end up with 11 strings with the contents "abcd" in memory - the interned one and 10 copies.
您正在创建一个对象。 JVM 将在幕后创建另一个对象,因为它 interns 由常量在类加载时创建的字符串,但这是 JVM 的事情(你还没有要求它
intern
)。更重要的是,您可以相当肯定,完成:once, then
只会创建一个对象。
JVM 在类加载时创建另一个(第一个)
String
对象:编译器将字符串放入.class
文件中的字符串常量区域。这些是 读入类的常量池和实习 当类被加载时。因此,当该行代码执行时,就会创建一个
String
。但是,在类中包含该行的事实会产生两个:一个用于加载类时创建的常量,另一个用于该行代码。You're creating one object. The JVM will create another object behind-the-scenes because it interns the string created by the constant at class load, but that's a JVM thing (you haven't asked it to
intern
). And more to the point, you can be fairly certain that having done:once, then
will only create one object.
The JVM creates the the other (first)
String
object at class load: The compiler puts the string in the string constants area in the.class
file. Those are read into the class's constant pool and interned when the class is loaded.So when that line of code executes, a single
String
is created. But the fact of having that line in the class creates two: One for the constant which is created when the class is loaded, and one for that line of code.