final字符串进行拼串后是否相等
public class Test {
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
// 等同于 new StringBuilder().append(d).append(2).toString();
String e = d + 2;
System.out.println((a == c));// true
System.out.println((a == e));// false
}
}
我们分析字节码可以看到,使用final定义的字符串在使用 ‘+’ 进行拼接字符串时,会到字符串常量池中加载;没有使用 final 定义的字符串在使用 ‘+’ 进行拼接字符串时,会先创建 StringBuilder 类,然后通过调用类中 append 方法进行添加字符串,最后通过 toString 方法转为字符串,而 toString 方法是直接创建 String 对象。