使用Literal和new关键字构造Java字符串

使用Literal和new关键字构造Java字符串,java,string,Java,String,为什么上面的代码返回false?创建新字符串名称时,它将在字符串常量池和堆中创建。接下来,当使用文字名称创建另一个字符串时,它是否应该引用在堆中创建的同一对象,因为文字名称已经存在于字符串常量池中?new始终创建一个新实例。。。从而避免了所有缓存和池。因此,new Stringname将创建一个包含字符串名称的新字符串对象 但是,当找到文本名称时,字符串名称已经生成并放置在池中。因此,甚至在新的被调用之前 出于同样的原因,您应该始终做到: public class Example{

为什么上面的代码返回false?创建新字符串名称时,它将在字符串常量池和堆中创建。接下来,当使用文字名称创建另一个字符串时,它是否应该引用在堆中创建的同一对象,因为文字名称已经存在于字符串常量池中?

new始终创建一个新实例。。。从而避免了所有缓存和池。因此,new Stringname将创建一个包含字符串名称的新字符串对象

但是,当找到文本名称时,字符串名称已经生成并放置在池中。因此,甚至在新的被调用之前

出于同样的原因,您应该始终做到:

    public class Example{  
         public static void main(String args[]){  
               String s1=new String("name");
               String s2="name";
               System.out.println(s1==s2);  
    }}  
而不是

Long.valueOf(42L);

因为new保证返回一个新实例。这是没有办法的。

在Java中,当你说new时,你肯定会得到一个新对象。文本名称后面的实例位于常量池中,构造函数访问、复制并从新表达式返回该实例。

请参见此处:new always创建新对象。新对象仅与自身相同。由于这是在编译时发生的,因此不会。您只需使用新字符串强制新字符串。字符串文本池仅包含字符串文本,而不包含您创建的新字符串。在问题中,新字符串首先出现。为什么在那里创建的字符串不能在来世使用?@bradimus它不是第一个创建的。。。因为在创建新字符串之前。。。已创建文本。因为它首先出现在新Stringname中的name中。或者,若你们想要一系列的答案字符串,那个么这些字符串将在常数池中,这是在公司时间确定的。很好。现在我们已经确定了这一点,请将其添加到您的答案中。
new Long(42L);