String a = new String ("TEST");
String b = new String ("TEST");
if(a == b) {
System.out.println ("TRUE");
} else {
System.out.println ("FALSE");
}
我尝试了一下,它打印出了“FALSE”,我想确切地知道原因。提前致谢。
String a = new String ("TEST");
String b = new String ("TEST");
if(a == b) {
System.out.println ("TRUE");
} else {
System.out.println ("FALSE");
}
它打印出FALSE
。
==
运算符比较对象引用,a
和b
是指向两个不同对象的引用,因此结果为FALSE
。
Guido 说:
此外,这些引用是不同的,因为字符串是使用new操作符创建的。如果你将它们创建为String a = "TEST"; String b = "TEST";
,那么输出可能会是TRUE
,因为JVM检查它保留的字符串池中是否存在匹配的字符串对象,所以将重复使用相同的对象。
String a = new String ("TEST");
String b = new String ("TEST");
if(a.equals(b)) {
s.o.p ("TRUE");
} else {
s.o.p ("FALSE");
}
只是为了让它完整:
String a = new String ("TEST").intern();
String b = new String ("TEST").intern();
System.out.println(a == b);
在大多数情况下,这将返回true
。
这就是原因:
public static void main(String [] args) {
// will return true
System.out.println(compare("TEST", "TEST"));
}
public static boolean compare (String a, String b) {
return a == b;
}
Interger.valueOf(200) == Integer.valueOf(200);
... - scheffield当您创建一个新对象(无论是字符串还是其他任何类型),返回的是该新对象的值引用的副本。
当两个对象具有相同的引用时,==
运算符将计算为 true。
例如:
Object o = new Object();
Object p = o; //<-- assigning the same reference value
System.out.println("o == p ? " + (o == p ) ); //<-- true
当您创建两个对象时,每个对象都有自己的引用值:
Object a = new Object();
Object b = new Object();
System.out.println("o == p ? " + (o == p ) ); //<-- false
字符串对象也是同样的情况。
当你赋值一个字符串字面量时,你得到的是同一个引用:
String x = "hello";
String y = "hello";
System.out.println("x == y ? " + (x == y ) ); //<-- true
但是你的例子中,你正在创建新对象,因此它们具有不同的引用值。
为了有效地比较字符串(或任何其他对象),您应该使用equals()
方法。
字符串字面量默认情况下会被发送到一个字符串池中以提高性能。
如果您想利用这个池,可以调用intern()
方法,它会返回池中的对象(如果存在)。
String a = "world";
String b = new String("world");
String c = new String("world").intern();//<-- returns the reference value in the pool.
System.out.println("a == b ? " + (a==b) ); //<-- false
System.out.println("b == c ? " + (b==c) ); //<-- false
System.out.println("a == c ? " + (a==c) ); // true!
在这里,我们使用了两个新关键字。每个新关键字都会生成一个新对象。
==
方法检查对象的 hashcode
,在这种情况下,我们得到了 false
作为答案。
s.o.p
?讽刺的笑声 - Buhake Sindi