0

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

String myStr = new String('Hello');

我知道后续调用 new String('Hello'); 将创建一个新的字符串对象但不会将其添加到池中,但是如果“Hello”尚未在池中,那么第一次呢?

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

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

如果,在第一次调用时, new String("Hello"); 将 Hello 添加到池中。然后在比较代码中,我们将池驻留对象“Hello”与文字“Hello”(== 右侧)进行比较。因此,== 的左侧不是指向与右侧相同的对象(在池中)吗?

4

4 回答 4

0

请看下面的帖子。我想它会给你最好的答案

Java中的字符串池是什么?

谢谢

于 2013-03-05T15:32:59.657 回答
0

是和不是。如果你的类中有文字“Hello”,它会在你的类被加载时(在你的代码运行之前)被添加到字符串池中。

但随后您创建了一个String不在字符串池中的 的新实例。

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

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

并且 nonew String(String s)不会将字符串添加到字符串池中;为什么将例如用户输入添加到字符串池会有用?

于 2013-03-05T15:55:31.943 回答
0

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

打印(myStr.equals(“你好”));此语句将返回 true。

于 2013-03-05T16:47:50.360 回答
0

当类包含“Hello”时,将添加到字符串池中

String myStr = new String("Hello");

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

于 2013-03-05T15:44:00.647 回答