Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单字符串池_Java_String_Pool - Fatal编程技术网

Java 简单字符串池

Java 简单字符串池,java,string,pool,Java,String,Pool,如果我在Java中有一个完全空的字符串池,并且我执行以下操作,字符串对象“Hello”是否会添加到字符串池中 String myStr = new String('Hello'); 我知道后续调用newstring('Hello');将创建一个新的字符串对象,但不会将其添加到池中,但是如果“Hello”不在池中,第一次该怎么办 编辑:基本上,我需要知道以下打印错误的原因: String myStr = new String("Hello"); print(myStr=="Hello"); 如

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

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

编辑:基本上,我需要知道以下打印错误的原因:

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

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

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

Thx

当类包含

String myStr = new String("Hello");

将加载。new String()将是堆上的对象,其内部字符数组将指向池中的字符数组。它不是新字符串(“Hello”),而是将“Hello”放在池中的类加载器

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

但是,然后创建一个新的
String
实例,该实例不在字符串池中

所以
“你好”!=新字符串(“Hello”)
,但是
“Hello”==新字符串(“Hello”).intern()

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


并且no
newstring(String s)
不会将该字符串添加到字符串池中;为什么将用户输入等添加到字符串池会有用?

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


打印(myStr.equals(“Hello”);这句话会变成真的。

这些我都看过了。我的问题是对“new String()”的第一次调用。因此,基本上,new String()metjod将首先检查Hello是否在池中。如果不是,请添加它。如果是,只需创建一个新的单独字符串对象?我在回答中添加了更多细节