`
^佐依^
  • 浏览: 17253 次
  • 性别: Icon_minigender_2
  • 来自: 惠安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于覆写hashCode方法和equals方法的简单示例程序

 
阅读更多

 

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方法流程解析

    主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    重载与覆写/重写的区别

     多态性是面向对象编程的一种特性,和方法无关, 简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,  即方法的重载——有不同的参数列表(静态多态性)  而当子类继承自父类的相同方法,...

    行业分类-设备装置-一种数据覆写方法.zip

    行业分类-设备装置-一种数据覆写方法

    一个简单的 GtkApplication 和 GtkApplicationWindow 的示例

    一个简单的 GtkApplication 和 GtkApplicationWindow 的示例,展示如何创建一个基本的 GTK+ 应用程序窗口,以便于从这个基础上开始构建一个更复杂的应用程序。使用 Python 和 GTK+ 3 (PyGObject) 创建。 在这个例程...

    php实现parent调用父类的构造方法与被覆写的方法

    本文实例讲述了php实现parent调用父类的构造方法与被覆写的方法。分享给大家供大家参考。具体分析如下: 覆写:被重新设计。 在子类中定义构造方法时,需要传递参数给父类的构造方法,否则我们得到的可能是一个构造...

    解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题

    主要介绍了解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    ==和equals() 的比较

    ==和 equals ()都是用于...所以,通常override(重写/覆写)java.lang.0bject 类的中equals()方法 按照自己的需要,在equals()方法中定义对象相等的含义。 String.equals () 注意:当此方法被重写时,通常有必要重写ha

    javascript 方法覆写实例代码

    以下页面在运行中,调试输出的永远是alter('1'),原因是按照页面加载从上至下的顺序,同名的方法以最后一个为准.

    C# 程序设计手册(WORD)

    部分类别和方法 222 限制 224 匿名型别 227 在查询中传回项目属性的子集 229 界面 230 明确界面实作 232 明确实作接口成员 234 使用继承明确实作接口成员 236 索引器 239 使用索引器 240 界面中的索引器 244 属性与...

    移动互联网-方法的覆写.ppt

    移动互联网应用

    Java的覆写操作实例分析

    主要介绍了Java的覆写操作,结合实例形式分析了java属性覆写及super调用父类方法覆写相关操作技巧,需要的朋友可以参考下

    Scala程序设计(第2版)

    11.3 覆写抽象方法和具体方法 272 11.4 覆写抽象字段和具体字段 274 11.5 覆写抽象类型 280 11.6 无须区分访问方法和字段:统一访问原则 280 11.7 对象层次结构的线性化算法 282 11.8 本章回顾与下...

    覆写

    覆写

    触摸屏事件示例1

    覆写 onTouchEvent() 方法并加入自己的逻辑。 也可以实现View.OnTouchListener 接口 并在View 对象上设置一个回调处理程序。 MotionEvent 在传递到 View 的onTouchEvent() 方法之前,将首先传递给该回调处理程序. ...

    Spring Cloud 覆写远端的配置属性

    Spring Cloud 覆写远端的配置属性

    覆写onMeasure例子

    Android 自定义view,覆写onMeasure例子

    覆写Feign的默认配置-代码部分.zip

    覆写Feign的默认配置-代码部分-代码部分.zip 覆写Feign的默认配置-代码部分博文中,优化后的服务消费者和服务提供者,以及Eureka Server、父级工程的源代码

Global site tag (gtag.js) - Google Analytics