Java 如果对象是用新运算符创建的,为什么要在字符串中插入方法?
我看到了许多关于使用字符串文字和新关键字创建对象的问题,如: 但这并不能澄清我的疑虑 案例1:使用字符串文字的字符串对象。 它在字符串常量池中创建一个对象,如果该对象不存在,则返回该对象的引用。该对象隐式插入 案例2:使用new()的字符串对象。 它创建了两个对象,一个在字符串常量池中,另一个在堆区域中。引用变量引用堆区域对象。对于此对象,我们需要调用intern方法将此对象显式放入字符串常量池 我的问题是,如果new()已经在字符串常量池中创建了一个对象,那么对堆区域中的对象调用intern方法有什么用呢 案例2:使用new()的字符串对象。它创建两个对象,一个在字符串常量池中,另一个在堆区域中 仅当通过传递字符串文本来创建新的Java 如果对象是用新运算符创建的,为什么要在字符串中插入方法?,java,string,object,Java,String,Object,我看到了许多关于使用字符串文字和新关键字创建对象的问题,如: 但这并不能澄清我的疑虑 案例1:使用字符串文字的字符串对象。 它在字符串常量池中创建一个对象,如果该对象不存在,则返回该对象的引用。该对象隐式插入 案例2:使用new()的字符串对象。 它创建了两个对象,一个在字符串常量池中,另一个在堆区域中。引用变量引用堆区域对象。对于此对象,我们需要调用intern方法将此对象显式放入字符串常量池 我的问题是,如果new()已经在字符串常量池中创建了一个对象,那么对堆区域中的对象调用intern
String
对象时,如下所示:
String s = new String("hello");
文本“hello”
将导致在字符串常量池中创建一个对象。newstring
将在堆上创建一个新的String
对象,并为文本创建对象内容的副本
您不应该像那样创建String
对象,因为这样做是不必要的,而且效率低下
但是,当传递给构造函数的值不是字符串文字时,您希望执行新字符串(…)还有其他原因。例如,该值是从文件读取的数据
案例1:使用字符串文字的字符串对象。它在字符串常量池中创建一个对象
对
如果是,它不存在
错。它是存在的
否则,返回此对象的引用
它总是返回对象的引用。没有“其他”的说法
此对象是隐式插入的
不是真的。因为它是一个字符串文本,所以它已经被实习了。编译器和类加载器会注意这一点。不是新的操作员
案例2:使用new()的字符串对象。它创建两个对象,一个在字符串常量池中
不是真的。它已经在那里了:见上图
还有一个在堆区
对
引用变量引用堆区域对象。对于此对象,我们需要调用intern方法将此对象显式放入字符串常量池
对
我的问题是new()是否已经在字符串常量池中创建了一个对象
没有。请参见上文。您弄错了:new
不会在字符串池中创建对象,它只在堆上创建一个对象。请检查答案:是的,我同意答案,但我的问题是对对象“s”调用intern()方法有何用如果字符串常量池中已经存在文本,则没有任何用处,您不应该这样做。您只需编写String s=“hello”代码>取而代之。执行类似于strings=newstring(“hello”).intern()的操作代码>是无用的,而且效率低下。