我来说说吧:
String s1 = "你好吗";
String s2 = "你";
String s3 = "好吗";
System.out.println(s1 == (s2 + s3));
JVM对字符串在连接时的处理是,当两个字符串在拼接时是没有变量存在:例如:
String s4 = "aaa"+"bbb";
这样s4在编译时就能确定了,也就是s4的值就是aaabbb。所以s4 == "aaabbb"返回的ture
但是如果字符串的拼接存在变量,例如:
String s5 = "aaa";
String s6 = "bbb"+s5;
这样s6在编译时期就不能确定值,所以s6=="bbbaaaa"是返回false的
总结:只要字符串在拼接后在编译时期就能确定他的值,那么就可以进行==返回的值就是true了。
若是想让结果为true。可以在前面加上fianl,进行宏替换
String s1 = "你好吗";
final String s2 = "你";
final String s3 = "好吗";
System.out.println(s1 == (s2 + s3)); |