java中的访谈问题

时间:2010-12-09 16:13:07

标签: java

String a = new String ("TEST");
String b = new String ("TEST");

if(a == b) { 
  System.out.println ("TRUE"); 
} else {
 System.out.println ("FALSE"); 
}

我尝试了它并打印FALSE,我想知道原因。

提前致谢。

6 个答案:

答案 0 :(得分:14)

打印FALSE

==运算符会比较对象引用,ab是对两个不同对象的引用,因此FALSE

圭多说:
此外,引用是不同的,因为使用new运算符创建字符串。如果将它们创建为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作为答案。