关于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方法,来达到你想要呈现出来的字符串效果。
打印结果是:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值