String s1="ab"; String s2="abc"; String s3=a1+"c"; System.out.println(s3==s2); 判断输出的是true还是false 答案是false
这是原理图
这是API原话
Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。 字符串连接是通过StringBuilder
(或StringBuffer
)类及其append
方法实现的。 字符串转换是通过方法来实现toString
,
一旦出现+ 就会调用底层的StringBuffer或者StringBulider类中的apand方法实现连接,然后用toString方法显示出来,所以他是堆区的; 但是排除常量优先机制(就是多个常量用+号连接,例如String s4="a"+"b"+"c",它在编译的时候就是abc了,然后再把abc赋值给s4)那么这样如果输出 System.out.print(s4==s2)显示的是ture