`
yuankai08021
  • 浏览: 14234 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于java中重写equals,hashcode,toString的方法

 
阅读更多
昨天参加了某欧美500强的笔试题,最后一道编程题目就是这个,其实是很基础的题目,我却没做出来,今天研究了一下,给和我一样对此还有些模糊的朋友分享下:

先写一个Cat类,里面包含了重写的equals,hashcode,toString方法
public class Cat {
int number;
String color;

public Cat(int number,String color) {
this.number = number;
this.color = color;
}

public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null){
return false;
}
if(obj instanceof Cat) {
Cat cat = (Cat)obj;
if(cat.color == this.color && cat.number == this.number){
return true;
}
}
return false;
}

public int hashCode() {
return number;
}

public String toString() {
return "number:"+this.number+", color="+this.color;
}
}


再一个main方法类:
public class MainTest {

public static void main(String[] args) {

Cat cat1 = new Cat(1,"red");
Cat cat2 = new Cat(1,"red");
System.out.println(cat1==cat2);
System.out.println(cat1.equals(cat2));

Map map = new HashMap();
System.out.println(cat1);
System.out.println(cat2);
map.put(cat1,"hello");
map.put(cat2, "hello");
System.out.println(map.size());
}


}
解析:
1.equals方法默认是比较两个对象的引用地址的,cat1和cat2是在内存中分配了两个不同的空间,如果不重写equals方法,那么cat1和cat2两个对象的引用永远不会相等的;
2.以前看书常说,重写了equals方法就要重写hashcode方法,当时不太明白,今天翻阅了些资料,原来一些集合类,如hashmap在执行put方法时,会去比较每次push进去的“键”值是否相同,而这个比较就是调用对象的hashcode方法和equals方法,所以如果不重写hashcode方法,那么上述例子,map.size的结果将是2;
3.关于重写toString方法,主要是用在打印对象时,因为打印时默认打印的是对象的内存地址,你可以重写对象的toString方法,来达到你想要呈现出来的字符串效果。
打印结果是:
分享到:
评论

相关推荐

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...

    javaee_tedu_day09.zip

    ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法

    Java toString的性能优化方案比较

    谁在关心toString的性能?没有人!除非当你有大量的数据在批量处理,使用...我们所钟爱的IDE们常常为我们生成equals/hashcode/toString这些方法,且我们通常不再去管它们。此外,这些IDE们提供了许多方式来生成我们自己

    kotlin中数据类重写setter getter的正确方法

    equals()/hashCode()函数对, toString() 函数, 输出格式为 “User(name=John, age=42)” , componentN() 函数群, 这些函数与类的属性对应, 函数名中的数字 1 到 N, 与属性的声明顺序一致, copy

    JAVA基础课程讲义

    equals和hashcode方法 143  泛型 144 思考作业 145 上机作业 145 第八章 IO技术 146 为什么需要学习IO技术 146 基本概念 146 数据源 146 流的概念 146 第一个简单的IO流程序及深入(将文件中的数据读入) 146 Java...

    疯狂JAVA讲义

    学生提问:hashCode方法对于HashSet的作用是什么? 249 7.3.2 TreeSet类 252 7.3.3 EnumSet类 259 7.4 List接口 261 7.4.1 List接口和ListIterator接口 261 7.4.2 ArrayList和Vector实现类 264 7.4.3 固定长度...

    Java Object 类高难度进阶版面试题集锦解析Java Object类高难度面试题及答案解析

    提供了20道高难度的Java Object类面试题及详细答案解析,涵盖了equals()、hashCode()、toString()、clone()、finalize()等方法的重写和应用,以及对象的比较、克隆、标识哈希码等概念。适合准备Java面试的开发者深入...

    1579068285.png

    简单创建代理模式,快速使用。能够让你快速了解代理的好处很使用。...2、重写了equals、hashCode、toString 3、有一个静态代码块,通过反射或者代理类的所有方法 4、通过invoke执行代理类中的目标方法doSomething

    java8源码-InfoScanner:Excel和CSV类型数据文件自动录入小工具

    java8 源码 InfoScanner ...最好重写toString、hashcode、equals方法,使用lombok的Data注解这些事情可省去,其自动完成 @Data public class Student { @ExportColumn("学号") private String xh; @ExportColu

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    5.1 Java中类的定义 104 实例083 自定义图书类 104 实例084 温度单位转换工具 105 实例085 域的默认初始化值 106 实例086 编写同名的方法 107 实例087 构造方法的应用 108 5.2 修饰符的使用 109 实例088 单例模式的...

    javaSE代码实例

    14.2 重写equals与hashCode方法 273 14.2.1 重写equals方法 273 14.2.2 重写hashCode方法 275 14.3 集合框架的层次结构 -277 14.4 Ordered与Sorted的接口 278 14.4.1 Ordered的排序 278 14.4.2 Sorted的...

    基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v5.8.0版_JAR)

    4、生成Bean界面新增是否生成字段注释和重写equals,hashCode,toString方法的配置。 5、MyBatis配置界面新增根据所有字段条件查询数据的选项。 6、新增TableGo使用说明书。 7、更新数据库驱动版本,新版的驱动可能不...

    【05-面向对象(下)】

    因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用static修饰的类成员属 于类成员,类Field既可通过类来访问,也可以...

    EpamArraysTesting

    类Object重写方法( toString() , equals() , hashCode() )。 不应在此Array类中放置任何逻辑该程序应支持以下操作: 排序数组; 搜索数组项(使用二进制搜索算法); 搜索max (最大值)和min (最小值)数组项...

    Array_Vitalij_Rusakevic

    类Object重写方法( toString() , equals() , hashCode() )。 不应在此Array类中放置任何逻辑该程序应支持以下操作: 排序数组; 搜索数组项(使用二进制搜索算法); 搜索max (最大值)和min (最小值)数组项...

    Java学习笔记-个人整理的

    {2.2.2}方法重写/覆盖}{50}{subsection.2.2.2} {2.3}修饰符}{51}{section.2.3} {2.4}父类对象的方法调用}{51}{section.2.4} {2.5}封装}{52}{section.2.5} {2.6}多态}{53}{section.2.6} {2.7}Sample code}{54}...

    ffmpeg-20170620-ae6f6d4-win64

    * 重写线程销毁方法,安全的关闭线程 */ @Override public void destroy() { status = false; } /** * 执行输出线程 */ @Override public void run() { String msg = ...

Global site tag (gtag.js) - Google Analytics