public class TestString {
public static void main(String[] args) {
String a = "abc";
String b = "abc";
System.out.println(a == b);
System.out.println(a.equals(b));
a += 123;
b += 123;
//可以看String的源码 定义的是常量的所以不能更改,但如果一旦更改,就会重新NEW
System.out.println(a == b);
}
}
解析:因为这里的字符串没有进行NEW进行赋值,所以进行比较地址值都是一致的,为new,但是当进行相加的时候,就会重新进行new一个新的字符串,因为String底层源码定义为fial无法更改的,所以进行值的更改时,需要new一个新的字符串,所以哪怕相加相同的值,但已经不是同一个对象,所以是false。
下图是String的源码