1

java文档说:

一个字符串池,最初是空的,由 String 类私下维护。

1)它是这些字符串文字的池 string literals 还是 references 这些字符串文字?在网上,一些文章将其称为字符串文字池,而其他文章将其称为引用池,所以我感到困惑。

2) 是按类还是按 JVM 创建字符串池?

3)是否有任何参考可以找到字符串池的详细信息,其实现等?

4

3 回答 3

4

1)它是字符串文字池还是对这些字符串文字的引用?在网上,一些文章将其称为字符串文字池,而其他文章将其称为引用池,所以我感到困惑。

这是同样的事情。您不能拥有没有引用的 String 对象,反之亦然。

而且,正如 Peter Lawrey 所说:“在 Java 中,对象位于堆内。没有其他地方。在其他东西(对象、数组、集合或堆栈)中唯一可以拥有的是对该对象的引用。”

2) 是按类还是按 JVM 创建字符串池?

每个 JVM 有一个字符串池……除非您使用的是一些奇特的 JVM,而他们决定以不同的方式实现它。(规范并没有说JVM必须有一个字符串池,但这通常是最有效的方法。)

3)是否有任何参考可以找到字符串池的详细信息,其实现等?

您可以下载 OpenJDK 6 或 7 的完整源代码。弹簧池是用本机代码实现的……所以您将阅读 C++。

于 2012-06-24T07:16:07.160 回答
1
Is it a pool of string literals or references to these string literals?.

好吧,显然它是字符串文字池。假设你写,

String str= "a learner";

它将通过equals()方法在字符串池中搜索字符串池中是否存在相同的字符串。如果在池中,则返回该字符串对象,否则将其存储在字符串池中并引用新添加的字符串被退回。

因此,它是 String 对象池,每当您键入新的字符串字面量时,就会调用 equals() 方法。

Is string pool created per class basis or per JVM basis?

JVM中只能有一类String,因为String类是final的。因此,每个 JVM 不存在多个 String 类的问题。最终结果是每个 JVM 只有一个字符串池。

于 2012-06-24T06:37:02.250 回答
0

它被称为字符串实习

  1. 它是一个字符串字面量池
  2. 实习是在 JVM 基础上完成的
  3. String 的 JDK 源代码中包含所有代码
于 2012-06-24T06:30:06.297 回答