【发布时间】:2021-05-16 22:50:34
【问题描述】:
String a = "devender";
String b = "devender";
String c = "dev";
String d = "dev" + "ender";
String e = c + "ender";
System.out.println(a == b); //case 1: o/p true
System.out.println(a == d); //case 2: o/p true
System.out.println(a == e); //case 3: o/p false
a 和 b 都指向字符串常量池中的相同字符串文字。所以true 在案例 1 中
String d = "dev" + "ender";
应该在内部使用类似的东西:
String d = new StringBuilder().append("dev").append("ender").toString();
a 和 d 如何指向同一个引用而不是 a 和 e?
【问题讨论】:
-
编译器在编译时知道
d的一切,因此可以对其进行优化和实习。e使用一个变量,所以编译器在编译时并不知道它的一切。此外,即使这种行为很常见,也不能保证这种行为。 -
@AzatNugusbayev 我跟着那个教程..:P
-
@dev - case -2 没有使用
StringBuilder,同样,使cfinal将使case 3 返回true -
@sidgate 绝对不是重复的。