String s1 =“Hello”和String s1 = new String(“Hello”)之间有什么区别?

时间:2013-10-22 04:54:21

标签: java

Java中String s1="Hello"String s1=new String("Hello")之间的区别是什么?

如果String s1="Hello"String s2=new String("Hello"),将s1 == s2

5 个答案:

答案 0 :(得分:3)

编码:

String s1 = "Hello";

使JVM变为intern字符串文字:相同字符串文字的每次使用都将是对同一对象的引用。

编码:

String s2 = new String("Hello")

将始终创建一个新的String对象。

那么,s1 == s2会是什么?

不,永远不会。

答案 1 :(得分:2)

String myStr = "hello";
String myStr1 = "hello";

当通过双等于比较时,这两者都将评估为真。但是,它们不相等,而是指向内存中相同的“文字字符串”。这绝不是你如何比较字符串的内容,所以不要让这个欺骗你。

String myStr = new String("hello");
String myStr1 = new String("hello");

将评估为false,因为它们都引用具有不同内存地址的不同对象。

在比较String的内容是否相等时,始终始终use myStr.equals(myStr1)。 请记住==仅比较它们是否在内存中引用相同的对象。

答案 2 :(得分:1)

以下是Joshua Bloch关于使用“new String()”的Effective Java的引用:

  

作为不做的极端例子,请考虑以下陈述:

     

String s = new String(“stringette”); // 不要这样做!

     

该语句在每次执行时都会创建一个新的String实例,而不是   那些对象创作是必要的。 String的参数   构造函数(“stringette”)本身就是一个String实例,在功能上   与构造函数创建的所有对象相同。如果这   用法发生在循环或频繁调用的方法中,数百万   可以不必要地创建字符串实例。改进版是   只需以下内容:

     

String s =“stringette”;

答案 3 :(得分:0)

  

如果String s1 =“Hello”且String s2 = new String(“Hello”),s1 == s2?

答案是:

因为,s1和s2是不同的对象,string是不可变的。因此,s1 == s2将为falses1.equals(s2)将为true

答案 4 :(得分:0)

您的问题的答案是否定的,请找到以下原因: -

  1. String s1 =“Hello”。这里,hello字符串将存储在一个位置,而s1将保留对它的引用。
  2. String s2 = new String(“Hello”)将创建一个新对象,将引用该对象并存储在不同的位置。
  3. 条件,s1 == s2将比较内存位置,这些位置现在是内存中的2个不同位置。所以它会变得虚假。