java中的访谈问题

Fer*_*ero 3 java

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

if(a == b) { 
  System.out.println ("TRUE"); 
} else {
 System.out.println ("FALSE"); 
}
Run Code Online (Sandbox Code Playgroud)

我试了一下它打印出来FALSE,我想知道原因.

提前致谢.

Alb*_*gni 14

它打印FALSE.

==运算符比较对象的引用,a并且b是对两个不同的对象的引用,因此FALSE.

Guido说:
另外,引用是不同的,因为字符串是使用new运算符创建的.如果你创建它们String a = "TEST"; String b = "TEST";那么输出可能是TRUE因为JVM检查它保留的String池中是否存在匹配的String对象,因此将重用相同的对象.

  • 此外,引用是不同的,因为使用new运算符创建字符串.如果将它们创建为String a ="TEST"; 字符串b ="TEST"; 然后输出可能为TRUE,因为JVM检查它保留的String池中是否存在匹配的String对象,因此将重用相同的对象. (7认同)
  • @Guido,来自http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html第3.10.5节"字符串文字 - 或者更一般地说,字符串是常量表达式的值(§15.28)-are"interned",以便使用String.intern方法共享唯一的实例." 在您的示例中,两个"TEST"是字符串文字. (3认同)
  • 它_WILL_是真的,而不是"可能". (2认同)