Java 简单字符串池
如果我在Java中有一个完全空的字符串池,并且我执行以下操作,字符串对象“Hello”是否会添加到字符串池中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"); 如
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是否在池中。如果不是,请添加它。如果是,只需创建一个新的单独字符串对象?我在回答中添加了更多细节