您好,欢迎来到花图问答。
搜索
您的当前位置:首页Java中的==和equals()的区别

Java中的==和equals()的区别

来源:花图问答

1. 对于基本类型(byte, short, int, long, char, float, double, boolean)

    ==运算符比较的是两个数的值,不能进行equals()比较,因为不是对象,equals()是Object类的方法

 

2. 对于引用类型

 

        自定义一个Animal类

 1 public class Animal {
 2 
 3     publicString name;
 4 
 5     public Animal(){
 6     }
 7 
 8     Animal(String name) {
 9         this.name = name;
10     }
11 }

      创建Animal对象并进行==比较

1 public class DemoEquals {
2     public static void main(String[] args) {
3         Animal cat1 = new Animal("傻猫");
4         Animal cat2 = new Animal("傻猫2");
5         System.out.println("cat1: " + cat1);
6         System.out.println("cat2: " + cat2);
7         System.out.println(cat1 == cat2);
8     }
9 }

  运行结果

    

        分析

        现在我们验证一下,

 1 public class DemoEquals {
 2     public static void main(String[] args) {
 3         Animal cat1 = new Animal("傻猫");
 4         Animal cat2 = new Animal("傻猫2");
 5         System.out.println("cat1: " + cat1);
 6         System.out.println("cat2: " + cat2);
 7         System.out.println("========");
 8         cat1 = cat2;   // 让cat1对象和cat2对象共享一块内存区
 9         System.out.println("cat1: " + cat1);
10         System.out.println("cat2: " + cat2);
11         System.out.println(cat1 == cat2);
12     }
13 }

        运行结果 

        

        分析

 

    2.2 equals()比较

        我们首先要知道,equals(Object obj)这个方法是Object这个类定义的一个方法。我们自定义的所有的类都是继承这个Object类的,所以也都有equals()这个方法。那我们先看看Object类中是如何定义这个方法的

       

       

        创建Animal类

 1 public class Animal {
 2 
 3     publicString name;
 4 
 5     public Animal(){
 6     }
 7 
 8     Animal(String name) {
 9         this.name = name;
10     }
11 }

         然后创建Animal对象进行equals比较

public class DemoEquals {
    public static void main(String[] args) {
        Animal cat1 = new Animal("傻猫");
        Animal cat2 = new Animal("傻猫2");
        System.out.println("cat1: " + cat1);
        System.out.println("cat2: " + cat2);
        System.out.println(cat1.equals(cat2));
        System.out.println("========");
        cat1.name = cat2.name;   // 修改名字,使得两个对象的name一样
        System.out.println("cat1: " + cat1);
        System.out.println("cat2: " + cat2);
        System.out.println(cat1.equals(cat2));
    }
}

        运行结果

        

       分析

        现在我们在Animal类中重写equals()方法

 1 @Override
 2     public boolean equals(Object obj){
 3         // 重写Object类的equals方法
 4         if (obj == this) return true;
 5         if (obj == null) return false;
 6         if (obj instanceof Animal){
 7             Animal animal = (Animal)obj;  // 类型强转
 8             // 因为name是String引用类型,所以直接进行equals比较就是进行值比较
 9             return animal.name.equals(this.name); 
10         }
11         return false;
12     }

       然后我们再次运行上述的例子

        运行结果

       

       这回可以看到,重写了equals()方法之后,比较的结果就是值比较的结果了。

 

3. 总结

    3.1 在基本类型中

    3.2 在引用类型中:

转载于:https://www.cnblogs.com/pyexile/p/11426010.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务