import java.util.*;

import java.lang.Comparable;

/**

* @desc 比较equals() 返回true 以及 返回false时, hashCode()的值。

*

* @author skywang

* @emai kuiwu-wang@163.com

*/

public class ConflictHashCodeTest2{

public static void main(String[] args) {

// 新建Person对象,

Person p1 = new Person("eee", 100);

Person p2 = new Person("eee", 100);

Person p3 = new Person("aaa", 200);

Person p4 = new Person("EEE", 100);

// 新建HashSet对象

HashSet set = new HashSet();

set.add(p1);

set.add(p2);

set.add(p3);

// 比较p1 和 p2, 并打印它们的hashCode()

System.out.printf("p1.equals(p2) : %s; p1(%d) p2(%d)\n", p1.equals(p2), p1.hashCode(), p2.hashCode());

// 比较p1 和 p4, 并打印它们的hashCode()

System.out.printf("p1.equals(p4) : %s; p1(%d) p4(%d)\n", p1.equals(p4), p1.hashCode(), p4.hashCode());

// 打印set

System.out.printf("set:%s\n", set);

}

/**

* @desc Person类。

*/

private static class Person {

int age;

String name;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String toString() {

return name + " - " +age;

}

/**

* @desc重写hashCode

*/

@Override

public int hashCode(){

int nameHash =  name.toUpperCase().hashCode();

return nameHash ^ age;

}

/**

* @desc 覆盖equals方法

*/

@Override

public boolean equals(Object obj){

if(obj == null){

return false;

}

//如果是同一个对象返回true,反之返回false

if(this == obj){

return true;

}

//判断是否类型相同

if(this.getClass() != obj.getClass()){

return false;

}

Person person = (Person)obj;

return name.equals(person.name) && age==person.age;

}

}

}

结果:

p1.equals(p2) : true; p1(68545) p2(68545)
p1.equals(p4) : false; p1(68545) p4(68545)
set:[aaa - 200, eee - 100]

转载于:https://www.cnblogs.com/chengshixiaonongming/p/10410571.html

hashCode()方法(覆盖hashCode()方法)相关推荐

  1. 【java基础18:方法覆盖与多态】什么时候使用方法覆盖 toString方法的覆盖 多态的基础语法与作用 向上/向下转型

    目录 方法覆盖Override 多态 方法覆盖Override 方法覆盖初体验,什么样的程序要方法覆盖 /*当前程序存在的问题(设计上的问题)??鸟儿在执行move()方法的时候,最好输出的结果是:& ...

  2. java:方法覆盖与方法重载

    方法签名 方法签名是指方法的参数类型,顺序和个数.不包含方法名称. 重载 重载必须满足以下条件 方法名 相同 方法的参数类型,个数和顺序至少一项不同 方法的返回类型可以不同 方法的访问权限修饰符可以不 ...

  3. Java刷题知识点之方法覆盖(方法重写)和方法重载的区别

    https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=6 方法重写的原则: 重写 ...

  4. 方法覆盖(方法重写)

    package com.qingfeng; /**  *  * @author win7  * 功能:方法覆盖(方法重写):子类的某个方法覆盖父类的某个方法  */ public class Demo ...

  5. Java——继承、方法覆盖

    继承 一.继承的作用 基本作用:子类继承父类,代码可以得到复用. 主要(重要)作用:因为有了继承关系,才有了后期的方法覆盖和多态机制. 二.继承的相关特性 B类继承A类,则称A类为超类(supercl ...

  6. Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

    1. 方法 1.1 方法 实现了某一功能,代码可以复用 1.2 方法签名 java中每个方法都有一个签名,包含方法名和参数列表(类型.个数以及顺序),只要其中一个不同,方法的签名不同,也就是属于不同的 ...

  7. 方法覆盖(重写)和方法重载

    方法覆盖(重写)和方法重载具有以下相同点: ·都要求方法同名. ·都可以用于抽象方法和非抽象方法之间. 方法覆盖和方法重载具有以下不同点: ·方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不 ...

  8. JAVA中方法覆盖,看这篇就够了

    方法覆盖 1.方法覆盖又被称为方法重写 2.什么时候使用方法重写? 当父类中的方法已经无法满足当前子类的业务需求: 子类有必要将父类中继承过来的方法进行重新编写: 3.代码需要满足什么条件才能构成方法 ...

  9. java方法覆盖Override

    1.什么时候考虑使用方法覆盖? 父类中的方法无法满足子类的业务需求,子类有必要对继承过来的方法进行覆盖. 方法覆盖又叫做:方法重写(重新编写),英语单词叫做:Override.Overwrite. 比 ...

  10. 15.Java方法覆盖

    方法重写(覆盖):就是子类有一个方法和父类的某个方法的方法名.返回值类型.参数列表一样,那么我们就说子类这个方法覆盖了父类的方法.[英文单词:override] 什么时候使用方法重写? 当父类中方的方 ...

最新文章

  1. 用php来检测proxy
  2. linux访问文档根目录之外的网页_开发文档加载不再卡顿,亿点点提升
  3. 基于LSTM的股票价格预测(完整金融类代码)
  4. 国家法定晚婚年龄是多少
  5. Java Web学习总结(36)——JavaEE知识体系及项目开发过程的总结
  6. PHP调用powershell权限,浏览器挂起执行运行Powershell的PHP
  7. (转)如何入门 Python 爬虫
  8. bootstrap入门之Code代码显示
  9. 认识移动基站通信设备
  10. 时序分析:ARMA方法(平稳序列)
  11. JEB动态调试debug模式
  12. android基带版本,Android - 基带版本为未知时自动隐藏
  13. 代理模式-Python实现
  14. Apache Flink 1.14.4 on yarn ha环境搭建
  15. kubeadm部署k8s直接证书100年
  16. 电信联通共享检测技术及防封杀
  17. 如何在EDUIS中导出ETL字幕模板_Arctime教程——将字幕导出到剪辑/合成软件
  18. 2013年10月17日浙大ZJG听百度CEO李彦宏讲座
  19. 能ping通IP地址,ping不通主机名问题解决
  20. UE4 反射系统(UBT和UHT)介绍

热门文章

  1. boost::detail::sp_typeinfo用法实例
  2. 宏BOOST_TEST_TRAIT_TRUE的用法
  3. DCMTK:用于管理常见细分特定类型的类
  4. VTK:可视化算法之CutWithScalars
  5. VTK:网格之ColoredElevationMap
  6. VTK:IO之ImageReader2Factory
  7. OpenCV用thrust使用cv :: cuda :: GpuMat
  8. Qt Creator使用Qt Quick工具栏
  9. Qt Creator添加Qt Designer插件
  10. vue 获取当前发布的版本_Vue 3.0重磅发布!