package testPackage;
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());
}
}
class Other { static String hello = "Hello"; }
and the compilation unit:
package other;
public class Other { static String hello = "Hello"; }
正确答案:true true true true false true
This example illustrates six points:
- Literal strings within the same class (§8) in the same package (§7) represent references to the same
String
object (§4.3.1).
- Literal strings within different classes in the same package represent references to the same
String
object.
- Literal strings within different classes in different packages likewise represent references to the same
String
object.
- Strings computed by constant expressions (§15.28) are computed at compile time and then treated as if they were literals.
- Strings computed at run time are newly created and therefore distinct.
- The result of explicitly interning a computed string is the same string as any pre-existing literal string with the same contents.
呵呵,我是没有能够全部答对
另外一篇关于String intern的文章:
http://laiseeme.javaeye.com/blog/102442