java的equals与==的区别

Posted fzdwr

tags:

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

看了网上关于equal与==的区别,感觉很多有些片面,不仔细,这里我来说说我对equal与==的理解

首先要了解基本类型与引用类型

1.int,char,boolean之类的就是基本类型,我们只要使用==即可判断是否相等,无法使用equals

2.引用类型分为两类,第一类是重写过hashcode()和equals()方法的类,比如String,Integer,等,这些类使用==比较的是内存地址,即不同引用是否指向同一个对象,是,则true。equals比较则是直接比较对象的内容,不是判断不同引用是否指向同一个对象,只要对象里的各种参数完全一致,就为·true

3.第二类引用类型,就是没有重写过hashcode()和equals()方法的类,我们看Object类下的equals()方法

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

我们知道所有类都是Object类的子类,就是说如果子类不重写equals()方法,那么该类使用equals()方法就是使用Object下的equals,就是不同引用是否指向同一个对象,是,则true。如果我们希望实现普通类只比较对象的属性,可以对hashcode()和equals()进行重写,下面就是

class Student 
    private String type;
    private String name;
    private  int age;
    Student(String type,String name,int age)
        this.age=age;
        this.type=type;
        this.name=name;
    
    @Override
    public int hashCode() 
        int B=31; // 31 131 1313 13131 131313 etc..
        int hash=0;
        hash=hash*B+age;
        hash=hash*B+type.toUpperCase().hashCode();
        hash=hash*B+name.toUpperCase().hashCode();
        return hash;
    
 
    @Override
    public boolean equals(Object obj) 
        if(this==obj)
            return true;
        
        if(obj==null)
            return false;
        
        Student student=(Student) obj;
        return student.hashCode()==this.hashCode();
    

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

java == 与 equals的区别

java中equals和equalsignorecase的区别

java中equals和equalsignorecase的区别

Java中“==”与equals方法的区别

Java equals()方法与“==”的区别

Java中==与equals的区别