我正在阅读一些字符串示例,我很困惑:
之间有什么区别
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
为什么会这样?
答案 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的新对象。 这是有道理的。