String a = new String ("TEST");
String b = new String ("TEST");
if(a == b) {
System.out.println ("TRUE");
} else {
System.out.println ("FALSE");
}
我尝试了它并打印FALSE
,我想知道原因。
提前致谢。
答案 0 :(得分:14)
打印FALSE
。
==
运算符会比较对象引用,a
和b
是对两个不同对象的引用,因此FALSE
。
String a = "TEST"; String b = "TEST";
,那么输出可能是TRUE
,因为JVM会检查它保留的String池中是否存在匹配的String对象,因此将重用相同的对象。
答案 1 :(得分:1)
代码将打印为FALSE。更正后的代码版本将使用.equals()而不是==
String a = new String ("TEST");
String b = new String ("TEST");
if(a.equals(b)) {
s.o.p ("TRUE");
} else {
s.o.p ("FALSE");
}
答案 2 :(得分:1)
只是为了完成它:
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;
}
答案 3 :(得分:1)
当您创建新对象(字符串或任何其他对象)时,返回的内容是对该新对象的值引用的副本。
当两个对象具有相同的引用时,==
运算符将评估为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
Strings对象也是如此。
分配字符串文字时,会得到相同的引用:
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!
答案 4 :(得分:0)
如果两个String变量指向同一个对象,则这两个变量称为同一对象的引用,
因此,如果您想以编程方式检查此比较,则使用== 运算符。如果两个变量引用相同的对象,则此运算符返回 true 值,如果不是,则 false 值被退回
答案 5 :(得分:-1)
这里我们使用两个新关键字。对于每个新关键字,都会生成一个新对象。
==
方法检查对象的hashcode
,在这种情况下,我们得到false
作为答案。