继续看《Java 语言规范 基于Java SE 8》,今天又看了一遍【例3.1】,有以下几点所得,记录一下。
- 常量表达式的运算是在编译的时候进行的;
- intern 方法(这个还是不太了解),显示限定运算得到字符串;
- 同包同类中多个相同的字面常量字符串其实是同一个引用;
- 同包不同类中多个相同的字面常量字符串是同一个引用;
- 不同包不同类中多个相同的字面常量字符创是同一个引用;
- 显示限定运算得到字符串,则运算结果与相同的字面常量字符串是同一个引用;
- 运行时通过连接计算得到的字符串和之前得到的字符串相同,也不是同一个引用;
- 显示限定运算得到两个相同字符串也不是同一个引用。
// 这是包A
public class StringContant {
public static void main(String[] args) {
String hello ="Hello", lo = "lo";
System.out.println((hello == "Hello") + " ");
System.out.println((Other.hello == hello) + " ");
System.out.println((other.Other.hello == hello) + " ");
System.out.println((hello == "Hel" + "lo") + " ");
System.out.println((hello == "Hel" + lo) + " ");
System.out.println((hello == ("Hel" + lo).intern()) + " ");
System.out.println(("Hel" + lo) == ("Hel" + lo) + " ");
System.out.println(("Hel" + lo).intern() == ("Hel" + lo) + " ");
System.out.println(("Hel" + lo).intern() == ("Hel" + lo).intern() + " ");
}
}
class Other{
static String hello = "Hello";
}
// 这是包 other
public class Other {
public static String hello = "Hello";
}
编译运行该程序得到如下输出: