`
李灵晖-raylee
  • 浏览: 128858 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

java基础入门-hashcode与equals方法

 
阅读更多

equils方法的特性:

1.自反性,对于任何非空引用x,x.equals(x)返回true

2.对称性,对于任何引用x,y,x.equals(y)返回true,那么y.equals(x)返回true

3.传递性,对于任何应用x,y,z,如果x.equals(y)回返true,以及x.equals(z)回返true,则y.equals(z)回返true

4.一致性,如果x,y,没有变化,则x.equals(y)应该返回同意的结果

5.对于任何非空的x,x.equals(null)返回false

hashcode,散列码,是由对象导出的一个整型值。

但是,对于不同的类,他都有可能重写equals和hashcode方法

我们在平常对比两个对象的时候需要注意这两个地方

下面是详细的代码例子

package com.ray.testobject;

/**
 * equals与hashcode
 * 
 * @author ray
 * @since 2015-05-02
 * @version 1.0
 */
public class Test {
	public static void main(String[] args) {
		String a = "ok";
		String b = new String("ok");
		System.out.println(a.equals(b));
		// 下面是string里面重写的equils方法
		// 可以看见首先对比两个obj是否一致,明显不是同一个字符串
		// 然后它里面再次对比字符串里面每个字符,只要认定字符一致,则字符串一致
		// public boolean equals(Object anObject) {
		// if (this == anObject) {
		// return true;
		// }
		// if (anObject instanceof String) {
		// String anotherString = (String)anObject;
		// int n = count;
		// if (n == anotherString.count) {
		// char v1[] = value;
		// char v2[] = anotherString.value;
		// int i = offset;
		// int j = anotherString.offset;
		// while (n-- != 0) {
		// if (v1[i++] != v2[j++])
		// return false;
		// }
		// return true;
		// }
		// }

		StringBuilder asb = new StringBuilder(a);
		StringBuilder bsb = new StringBuilder(b);
		System.out.println(asb.equals(bsb));
		// 由于StringBuilder没有重写equils方法,所以调用的是object里面的equils方法
		// 下面是object里面的方法,他至对比两者指向的对象是否一致,所以返回是false
		// public boolean equals(Object obj) {
		// return (this == obj);
		// }

		// 同理,在hashcode方法里面string已经重写, 而stringbuilder却没有
		System.out.println("a.hashCode:" + a.hashCode());
		System.out.println("b.hashCode:" + b.hashCode());
		System.out.println("asb.hashCode:" + asb.hashCode());
		System.out.println("bsb.hashCode:" + bsb.hashCode());
	}
}


输出:

true
false
a.hashCode:3548
b.hashCode:3548
asb.hashCode:29013258
bsb.hashCode:12830537

由上面的代码可以看见,每个类都有可能重写相应的equals和hashcode方法,所以,

在对比对象的时候必须注意上面两个方法的使用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    AIC的Java课程1-6章

    第9章 常用类 4课时  理解Object类及其常用方法equals,hashCode和finalize等。  能够使用String,StringBuffer,StringBuilder类创建字符串对象和使用其方法,分辨不同类之间的区别。 ...

    Java入门教程(微学苑)-part1

    最好的最简单的Java入门教程。 目录 1 Java概述 1 1.1 Java语言概述 1 1.2 Java虚拟机以及跨平台原理 2 1.3 关于JVM的执行效率 2 1.4 客户端市场的折戟 3 1.5 Java的主要就业方向 3 1.5.1.1 Web开发 3 1.5.1.2 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    廖雪峰 Java 教程.doc

    Java快速入门 Java简介 安装JDK 第一个Java程序 Java代码助手 使用IDE 使用IDE练习插件 Java程序基础 Java程序基本结构 变量和数据类型 整数运算 浮点数运算 布尔运算 字符和字符串 数组类型 流程...

    JAVA基础课程讲义

    第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    java8源码-JavaGuide:【Java学习+面试指南】一份涵盖大部分Java程序员所需要掌握的核心知识

    java8 源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员...hashCode与equals) (String和

    java8源码-JavaGuide:指南

    java8 源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员...hashCode与equals) (String和

    java8源码-ToBeABestJavaer:我要把java一顿暴学!!!!

    java8 源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员...hashCode与equals) (String和

    新手入门写Java程序的三十个基本规则

    新手入门写Java程序的三十个基本规则 (1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:  ...

    Java面向对象入门至精通

    以及toString()方法、equals方法、hashCode方法、instanceof修饰符等等; 课程《Java零基础至高级应用》从基础开始进行系统教学,全套课程精细讲解,高级课程超过其他机构30%的课程量,经过我们全套课程系统学习的...

    疯狂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 固定长度...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    2017年必会的JAVA面试题,月薪10K+ So easy

    该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。不但包含经典的面试问题,如线程、集合、equals 和 hashcode、socket,而且还包含了 NIO、数组、字符串、Java 8 等主题。

    【05-面向对象(下)】

    •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用...

    HibernateAPI中文版.chm

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    hibernate3.2中文文档(chm格式)

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    hibernate3.04中文文档.chm

    5.3. 实现equals()和hashCode() 5.4. 动态模型(Dynamic models) 6. 对象/关系数据库映射基础(Basic O/R Mapping) 6.1. 映射定义(Mapping declaration) 6.1.1. Doctype 6.1.2. hibernate-mapping 6.1.3. ...

    Hibernate中文详细学习文档

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    Hibernate教程

    5.3. 实现equals()和hashCode() 5.4. 动态模型(Dynamic models) 6. 对象/关系数据库映射基础(Basic O/R Mapping) 6.1. 映射定义(Mapping declaration) 6.1.1. Doctype 6.1.2. hibernate-mapping 6.1.3. class...

Global site tag (gtag.js) - Google Analytics