欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造Lab4实验总结—equals()和hashCode()

程序员文章站 2024-02-09 18:10:04
...

在实验四debug修正完善过程中,发现自己的代码中很多类都只写了equals()方法,却没有完成hashCode()方法,故对这两个方法进行学习并在此进行记录。
1、简单概念
hashCode()方法与equals()方法作用相同,都是用来比较两个对象是否一致,而相比于equals()较复杂的实现,hashCode()只要return一个hash值即可实现比较,效率无疑高了很多,之所以在类中需要把两个方法均Override,其原因主要是根据hashCode()的返回值定义,不同的对象也有可能有相同的返回值,所以这个方法并不是一定可靠,然而equals()方法对两个对象的所有内容进行比较,其结果也是可靠的。因此我们可以得出:equal()相等的两个对象他们的hashCode()肯定相等,hashCode()相等的两个对象他们的equal()不一定相等。 因而对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以每当需要对比的时候,先用hashCode(),如果返回值不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象一定相同,这样既提高了效率也保证了正确性。
2、具体实现
因为较为简单,所以直接上代码,对于我使用过的IDEA和eclipse两个IDE,这两种方法的Override都是可以通过编译器自动生成的。

public class Student {  
    private int age;  
    private String name;  
    public Student() {  
    }  
    public Student(int age, String name) {  
        this.age = age;  
        this.name = name;  
    }  
    
    @Override  
    public int hashCode() {  
        final int prime = 31;  
        int result = 1;  
        result = prime * result + age;  
        result = prime * result + ((name == null) ? 0 : name.hashCode());  
        System.out.println("hashCode : "+ result);  
        return result;  
    }  
    @Override  
    public boolean equals(Object obj) {  
        if (this == obj)  
            return true;  
        if (obj == null)  
            return false;  
        if (getClass() != obj.getClass())  
            return false;  
        Student other = (Student) obj;  
        if (age != other.age)  
            return false;  
        if (name == null) {  
            if (other.name != null)  
                return false;  
        } else if (!name.equals(other.name))  
            return false;  
        return true;  
    }  
      
} 

上一篇: 第六章读书笔记

下一篇: lab4