简单字符串池

时间:2013-03-05 15:28:11

标签: java string pool

如果我在Java中有一个完全空的字符串池并执行以下操作,那么字符串对象'Hello'是否会添加到字符串池中。

String myStr = new String('Hello');

我知道后续调用new String('Hello');将创建一个新的字符串对象,但不将其添加到池中,但如果池中还没有“Hello”,那么第一次该怎么办?

编辑:基本上,我需要知道为什么以下打印错误:

String myStr = new String("Hello");
print(myStr=="Hello");

首次调用时,如果是新字符串(“Hello”);将Hello添加到池中。然后在比较代码中,我们将池驻留对象'Hello'与文字'Hello'(==的右侧)进行比较。因此,==的左侧是否指向与右侧相同的对象(在池中)?

4 个答案:

答案 0 :(得分:0)

请查看以下帖子。我想这会给你最好的答案

What is String pool in Java?

THX

答案 1 :(得分:0)

当包含

的类时,

“Hello”将添加到String池中

String myStr = new String("Hello");

将被加载。 new String()将成为堆上的对象,其内部char数组将指向池中的char数组。它不是新的String(“Hello”),而是将“Hello”放入池中的类加载器

答案 2 :(得分:0)

是和否。如果你有文字"你好"在你的类的某个地方,当你的类被加载时(在代码运行之前),它将被添加到字符串池中。

但是你创建了一个String的新实例,它不在字符串池中。

所以"Hello" != new String("Hello")"Hello" == new String("Hello").intern()

这意味着new String("Hello")永远不会将此新实例添加到字符串池中,因为那里已经存在"Hello"

没有new String(String s)不会将字符串添加到字符串池中;添加例如,为什么有用呢?用户输入字符串池?

答案 3 :(得分:0)

在Java' =='如果不与原始数据类型一起使用,则运算符用于检查对象的引用而不是它自身的对象的内容。因此在你的情况下 myStr和"你好"内存中有两个不同的对象,这就是它返回false的原因。另一方面,如果你想比较 对象的内容使用equals()方法,即

打印(myStr.equals("你好&#34));该陈述将返回true。