import java.util.*;
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public int hashCode(){
return this.name.hashCode()+this.age*1000;
}
public boolean equals(Object obj){
Person p = (Person)obj;
if(p.name.equals(this.name)&&p.age==this.age){
return true;
}else{
return false;
}
}
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class TestHashCodeAndEquals{
public static void main(String args[]){
Map m = new HashMap();
//m.put("张三",new Person("张三",30));
//System.out.println(m.get("张三"));
//输出:姓名:张三,年龄:30
//覆写hashCode和equals方法之前
//m.put(new Person("张三",30),"张三");
//System.out.println(m.get(new Person("张三",30)));
//输出:null
//Person p = new Person("张三",30);
//m.put(p,"张三");
//System.out.println(m.get(p));
//输出:张三
//覆写hashCode和equals方法之后
m.put(new Person("张三",30),"张三");
System.out.println(m.get(new Person("张三",30)));
//输出:张三
}
}
简单理解:
没覆写之前两次new Person(...,...),对象的hashCode不同,覆写后两次new Person(...,...),对象的hashCode相同。
不知道在内存中是否是一个?测试一下:
Person p1=new Person("张三",30);
Person p2=new Person("张三",30);
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
输出:
false
true
在内存中应该还是两个对象~~之前理解有误额。
分享到:
相关推荐
主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
多态性是面向对象编程的一种特性,和方法无关, 简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理, 即方法的重载——有不同的参数列表(静态多态性) 而当子类继承自父类的相同方法,...
行业分类-设备装置-一种数据覆写方法
一个简单的 GtkApplication 和 GtkApplicationWindow 的示例,展示如何创建一个基本的 GTK+ 应用程序窗口,以便于从这个基础上开始构建一个更复杂的应用程序。使用 Python 和 GTK+ 3 (PyGObject) 创建。 在这个例程...
本文实例讲述了php实现parent调用父类的构造方法与被覆写的方法。分享给大家供大家参考。具体分析如下: 覆写:被重新设计。 在子类中定义构造方法时,需要传递参数给父类的构造方法,否则我们得到的可能是一个构造...
主要介绍了解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
==和 equals ()都是用于...所以,通常override(重写/覆写)java.lang.0bject 类的中equals()方法 按照自己的需要,在equals()方法中定义对象相等的含义。 String.equals () 注意:当此方法被重写时,通常有必要重写ha
以下页面在运行中,调试输出的永远是alter('1'),原因是按照页面加载从上至下的顺序,同名的方法以最后一个为准.
部分类别和方法 222 限制 224 匿名型别 227 在查询中传回项目属性的子集 229 界面 230 明确界面实作 232 明确实作接口成员 234 使用继承明确实作接口成员 236 索引器 239 使用索引器 240 界面中的索引器 244 属性与...
移动互联网应用
主要介绍了Java的覆写操作,结合实例形式分析了java属性覆写及super调用父类方法覆写相关操作技巧,需要的朋友可以参考下
11.3 覆写抽象方法和具体方法 272 11.4 覆写抽象字段和具体字段 274 11.5 覆写抽象类型 280 11.6 无须区分访问方法和字段:统一访问原则 280 11.7 对象层次结构的线性化算法 282 11.8 本章回顾与下...
覆写
覆写 onTouchEvent() 方法并加入自己的逻辑。 也可以实现View.OnTouchListener 接口 并在View 对象上设置一个回调处理程序。 MotionEvent 在传递到 View 的onTouchEvent() 方法之前,将首先传递给该回调处理程序. ...
Spring Cloud 覆写远端的配置属性
Android 自定义view,覆写onMeasure例子
覆写Feign的默认配置-代码部分-代码部分.zip 覆写Feign的默认配置-代码部分博文中,优化后的服务消费者和服务提供者,以及Eureka Server、父级工程的源代码