我试图理解字符串常量池,如何在常量池中管理字符串文字对象,我无法理解为什么我false从下面的代码中 获取s2 == s4
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abcd";
String s3 = "abc" +"d";
String s4 = s1 + "d";
System.out.println(s2 == s3); // OP: true
System.out.println(s2 == s4); // OP: false
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 12
表达式"abc" + "d"是一个常量表达式,因此连接在编译时执行,导致代码等效于:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcd";
String s4 = s1 + "d";
Run Code Online (Sandbox Code Playgroud)
表达s1 + "d"是不恒定的表达,因此在执行执行时间,创建一个新的字符串对象.因此虽然s2并且s3引用相同的字符串对象(由于常量字符串实习),s2并且s4引用不同(但相等)的字符串对象.
有关常量表达式的更多详细信息,请参见JLS的第15.28节.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |