看了网上关于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();
    }
}

最新文章

  1. LINUX下YUM源配置
  2. 虚拟机主机能互相ping通,但是无法远程连接
  3. 由select * from table where 1=1中的1=1说开数据库
  4. servlet的生命周期与运行时的线程模型
  5. iOS开发必备HUD(透明指示层)
  6. C#文件对话框,一次多选文件设置
  7. 使用webstorm上传代码到github
  8. css设置水平垂直居中
  9. linux修改系统时间date命令加clock -w
  10. [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)
  11. Ajax及select级联
  12. 实现一个book类
  13. 《软工实践》第零次作业 - 一些QA
  14. 【AtCoder】AGC016
  15. 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题
  16. 【Mac使用系列】常用软件及快捷键
  17. Spring、Springmvc整合web的web.xml配置
  18. 移除wordpress版本信息 删除无用信息
  19. JSPatch 可以让你用 JavaScript 书写原生 iOS APP
  20. Optimal Milking---poj2112(多重匹配+Floyd+二分)

热门文章

  1. hibernate validator 专题
  2. HDU 1143 Tri Tiling(递归)
  3. MongoDB 可视化管理工具
  4. [OpenGL]OpenGL坐标系和坐标变换
  5. intel edison with grove lcd
  6. HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详细的说明
  7. Microsoft.AspNet.SignalR实现弹幕(即时通讯)
  8. MVC WebApi的两种访问方法
  9. 如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推
  10. 【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 - ImageButton