zoukankan      html  css  js  c++  java
  • eqauls方法和hashCode方法

    1、Java中eqauls方法和hashCode方法

    (1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同

    (2)如果两个对象的hashCode相同,它们并不一定相同(不一定是同一对象)

    如果违背了上述原则就会发现在使用容器时,相同的对象可以出现在同一个Set集合(Set不能存储相同的元素)中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)

    2、equals方法的特性

    (1)自反性

    x.equals(x):true

    (2)对称性

    x.equals(y)返回true时,y.equals(x)也必须返回true

    (3)传递性

    x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true

    (4)一致性

    当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值,而且对于任何非null值的引用x,x.equals(null)必须返回false

    3、实现高质量的equals方法的诀窍

    (1)使用==操作符检查“参数是否为这个对象的引用”

    (2) 使用instanceof操作符检查“参数是否为正确的类型”

    (3)对于类中的关键属性,检查参数传入对象的属性是否与之相匹配

    (4) 编写完equals方法后,问自己它是否满足对称性、传递性、一致性

    (5)重写equals时总是要重写hashCode

    (6)不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解

     public boolean equals(Object obj) {
            // 判断当前对象和传递的对象
            if (this == obj) {
                return true;
            }
            // 判断传递进来的对象是否是Person类型
            if (!(obj instanceof Person)) {
                return false;
            }
            // 将obj向下转型为Perosn引用,可以访问Person特有内容,否则只能访问共有内容
            Person p = (Person) obj;
            return this.age == p.age && this.name == p.name;
        }
  • 相关阅读:
    Spring 中众多的的Initializer
    Spring Factories
    spring 的各种context
    @import和@Bean的区别,以及ImportSelector和ImportBeanDefinitionRegistrar两个接口的简单实用
    Spring 配置的方式
    记一次JAVA FULL GC问题处理【3】
    关于String, StringBuilder,StringBuffer 的一些测试数据
    记一次JAVA FULL GC问题处理【2】
    ThreadLocal 结构
    记一次JAVA FULL GC问题处理【1】
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12722440.html
Copyright © 2011-2022 走看看