由此生成了多少个 Java 对象 - new String(“abcd”)

发布于 2024-10-20 10:16:25 字数 55 浏览 1 评论 0原文

String s = new String("abcd");
String s = new String("abcd");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

还在原地等你 2024-10-27 10:16:25

实习生池中有一个字符串,每次运行代码时都会重复使用该字符串。

然后是每次运行该行时都会构造的额外字符串。例如:

for (int i = 0; i < 10; i++) {
    String s = new String("abcd");
}

最终会在内存中得到 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:

for (int i = 0; i < 10; i++) {
    String s = new String("abcd");
}

will end up with 11 strings with the contents "abcd" in memory - the interned one and 10 copies.

难以启齿的温柔 2024-10-27 10:16:25

正在创建一个对象。 JVM 将在幕后创建另一个对象,因为它 interns 由常量在类加载时创建的字符串,但这是 JVM 的事情(还没有要求它intern)。更重要的是,您可以相当肯定,完成:

String s1 = new String("abcd");

once, then

String s2 = new String("abcd");

只会创建一个对象。

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:

String s1 = new String("abcd");

once, then

String s2 = new String("abcd");

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文