java中的新String(“ONE”)和String one =“ONE”有什么区别?

时间:2011-11-28 11:37:58

标签: java string

  

可能重复:
  Java Strings: “String s = new String(”silly“);”

我正在阅读一些字符串示例,我很困惑:

之间有什么区别

String one = new String("ONE");

String one = "ONE";

这就是为什么我有点困惑的例子

String one = new String("ONE");
String another_one = new String("ONE");
System.out.print(one.equals(another_one)); //-->true
System.out.print(one == another_one );     //-->false

,而

  String one = "ONE";
  String another_one = "ONE";
  System.out.print(one.equals(another_one)); //-->true
  System.out.print(one == another_one );     //-->true

为什么会这样?

2 个答案:

答案 0 :(得分:3)

String one = new String("ONE");

创建一个新对象。使用equals方法进行比较比较字符串本身,当它们完全相同时,它返回true。比较使用" =="运算符会比较对象,在这种情况下,自创建新对象后,这些对象不同。

String one = "ONE";
String another_one = "ONE";  

这实际上并没有创建一个新对象,编译器会优化这两个语句,以便两者都能在一个"一个"和#34; another_one"指向内存中的同一个对象,因为它们都引用相同的字符串文字。由于这里两个变量都指向同一个对象,因此" =="在这种情况下将返回true。

答案 1 :(得分:1)

文学ONE在编译后变得不变。也就是说,在两个情况下,两个字符串指的是相同的位置。那是他们平等的时候。在第一种情况下,another_one对象显式是具有内容ONE的新对象。 这是有道理的。