equals和 == 的区别

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equals和 == 的区别相关的知识,希望对你有一定的参考价值。

1 问题

equals和 == 都可以对于值类型,然后比较代数值是否相等。那么equals和 == 的具体区别是什么?

2 方法

  1. == 是运算符,可以使用在基本数据类型变量和引用数据类型变量中,
    如果比较的是基本数据类型:

    比较的是两个变量保存额数据是否相等。


    如果比较的是引用数据类型:

    比较两个对象的地址值是否相同。

    即两个引用是否指向同一个对象实体。



    其运行结果是:


    true:

    基本数据类型不用看类型,因为有自动类型提升。


    false: 因为比较的是地址。


    public class boke3a
       public static void main(String[] args)
           //基本数据类型举例
           int number1 = 65;
           float number2 = 65.0f;
           System.out.println(number1 == number2);
           //引用类型举例
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1 == stu2);
       
  2. equals()是一个方法,而非运算符,只能适用于引用数据类型。

    其运行结果:

    由于stu1和stu2是两个对象,所以地址不一样,输出false是因为比较的是地址值。


    public class boke3b
       public static void main(String[] args)
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1.equals(stu2));
       
  3. 但在实际使用中,一般会重写定义equals方法,因为像String、Date、File、包装类等都重写了Object类中的equals()方法。

    重写后,比较的不是两个引用的地址值,而是比较两个对象的实体内容是否相同。

3 结语

== 比较基本数据类型时,比较的是数值;比较引用数据类型时,比较的是地址值。而equals比较的其实还是地址值。但是由于像String、Date、File、包装类等都重写了Object类中的equals方法。除了 String、Date、File、包装类等以外,若想使用equals比较对象的实体而非地址,就需要重写equals。

以上是关于equals和 == 的区别的主要内容,如果未能解决你的问题,请参考以下文章

equals和==的区别

equals()和==到底有啥区别啊?

Java里的equals和==的区别是否equals是比较内容,==是比较地址的?

[转]Java中==和equals的区别,equals和hashCode的区别

equals和==的区别是啥?

==和equals()的区别