是否有这样的经历,在程序中使用 == 运算符比较所有字符串。
但是,直到遇到了一个bug,将其中一个改为.equals(),它修复了这个bug。
是 ==不起效果了?什么时候应该使用,不应该使用?有什么区别吗
== 比较引用地址的相等(比较他们是否同一个地址)
.equals() 是对值的比较()
// 这有两个相同的值
new String("test").equals("test") // --> true
// 但是他们不是相同的对象
new String("test") == "test" // --> false
// 新创建的对象也不相等
new String("test") == new String("test") // --> false
//由编译器内部调用,因此引用了同一个对象
"test" == "test" // --> true
// 编译器将字符串文字连在一起,并对结果进行内部处理 比较后也是相等。
"test" == "te" + "st" // --> true
// ... 但是如果用对象的equals() Objects.equals() 他们的值就会相等
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true