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和equalsignorecase的区别