equals() 与 == 的区别?

一、简述区别

1、"==",对于基本类型和引用类型的作用是不同的

  • 基本类型:比较的是值是否相同;
  • 引用类型:比较的是引用是否相同;

2、重写后的equals()方法用来比较的是两个对象的内容是否相等,如果没有重写的equals()方法,作用等同于“==”

请看一个小例子:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

代码解读:
因为 x 和 y 指向的是同一个引用,所以 “==” 也是 true,而 new String()方法则重写开辟了内存空间,所以 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

二、equals()方法解读
public class Person {
     private String name;
     private Integer age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
Person p1 = new Person("钟梅", 25);
Person p2 = new Person("钟梅", 25);
System.out.println(p1 == p2);  //false
System.out.println(p1.equals(p2)); //false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

public boolean equals(Object obj) {
    return (this == obj);
}

原来 equals 本质上就是 ==。
那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String p3 = new String("钟梅");
String p4 = new String("钟梅");
System.out.println(p3.equals(p4)); //true

其实是String内部重写了equals()方法 ,把引用比较改成了值比较。

三、总结

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

发布了30 篇原创文章 · 获赞 12 · 访问量 3452

猜你喜欢

转载自blog.csdn.net/zx1293406/article/details/103923682
今日推荐