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的源码

本文探讨了Java中字符串`String`的比较方式,通过`==`与`.equals()`的区别展示了字符串对象的内存行为。当字符串未进行`new`操作时,`==`比较的是引用地址,而`.equals()`比较的是内容。在对字符串进行修改如追加数字时,由于`String`不可变,会创建新的对象,导致`==`比较返回`false`。深入理解这一概念有助于优化Java代码中的字符串操作。
1260

被折叠的 条评论
为什么被折叠?



