- 浏览: 756110 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (179)
- 设计模式 (6)
- 学习笔记 (42)
- java基础 (33)
- struts (1)
- spring (1)
- hibernate (1)
- SSH (0)
- HTML (1)
- javascript (1)
- JQuery (0)
- servlet (0)
- database (14)
- BRIT报表开发 (0)
- MAXIMO开发 (0)
- 经验教训 (2)
- tomcat (1)
- mxgraph (55)
- redis (4)
- redhat (0)
- 学习笔记,eclipse (0)
- linux (9)
- FatJar (1)
- 日志管理 (1)
- MySql (1)
- JointJSJavaScript diagramming library JS在线图形编辑 (0)
- jvm (4)
- quartz (0)
- Oracle (1)
- eclipse (1)
- MINA (1)
- Hadoop (2)
- Mongodb (1)
- Maven (1)
- 管理 (1)
最新评论
-
rogue2yjg:
为什么不直接在IoHandler里的sessionClosed ...
Mina 断线重连 -
hgrapple:
死锁异常DEAD LOCK: IoFuture.await() ...
Mina 断线重连 -
q178266871:
freedomszq 写道重连是出现DEAD LOCK: Io ...
Mina 断线重连 -
freedomszq:
重连是出现DEAD LOCK: IoFuture.await( ...
Mina 断线重连 -
wellway:
fenyun689 写道知道哪里错了。谢谢。我的也出现这个问题 ...
Mina 断线重连
两个对象用equals方法比较为true,它们的Hashcode值相同吗?
答:不一定相同。正常情况下,因为equals()方法比较的就是对象在内存中的值,如果值相同,那么Hashcode值也应该相同。但是如果不重写hashcode方法,就会出现不相等的情况。
下面的话来自JDK:
hashCode
public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常规协定是:
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
equals
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
看看红色的部分,说明的是JDK规定当你调用equals方法比较两个对象相等时,他们调用hashcode方法时,都应该返回相同的整数值,也就是hashcode相等。记住,是应该相同。为什么应该?下面这段红色字体说了,必须重写hashcode方法维护...协定!如果你不重写,那么就不能保证hashcode返回相同结果。
换句话说:重写equals方法时请必须重写hashcode,以保证equals方法相等时两个对象hashcode返回相同的值。
评论
换句话说:重写equals方法时请必须重写hashcode,以保证equals方法相等时两个对象hashcode返回相同的值。
class A1{
private int i;
public A1(int i){
this.i = i;
}
public int getI(){
return i;
}
public boolean equals(Object o){
A2 obj = (A2)o;
return i==obj.getI();
}
}
class A2{
private int i;
public A2(int i){
this.i = i;
}
public int getI(){
return i;
}
public boolean equals(Object o){
A1 obj = (A1)o;
return i==obj.getI();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestMain t = new TestMain();
A1 a1 = t.new A1(3);
A2 a2 = t.new A2(3);
System.out.println(a1.equals(a2));
System.out.println(a1.hashCode()==a2.hashCode());
}
}
运行结果,true,false,能给出解释么?
发表评论
-
《Python绝技:运用Python成为顶级黑客》试读感想
2016-03-14 01:28 5696《Python绝技:运用Python成为顶 ... -
《写给大忙人看的Java核心技术》 试读感想
2016-03-13 18:00 2558《写给大忙人看的Java核心技术》 试读感想 ... -
《分布式服务框架原理与实践》试读感想
2016-03-09 19:56 1199《分布式服务框架原理与实践》试读感想 ... -
《架构探险——从零开始写Java Web框架》 试读感想
2015-11-05 15:19 5103《架构探险——从零 ... -
《Java程序员面试宝典(第4版)》 试读感想
2015-11-02 18:42 2703《Java程序员面试宝典 ... -
读《技术管理之巅:如何从零打造高质效互联网技术团队?》有感
2015-08-05 14:51 2597读《技术管理之巅: ... -
Log4j2配置
2015-01-09 18:12 0目前log4j2已经发版到2.1版本,一直都关注,04年底还 ... -
《大型网站系统与Java中间件实践》读后感
2014-06-13 21:44 8301《大型网站系统与Java中间件实践》读后感 这几 ... -
java实现openssl的md5加密
2014-05-26 16:26 1423可信来源:http://hi.baidu.com/huqiw ... -
logback手动启动日志
2014-05-22 17:24 0/** * */ package com.ctf ... -
No grammar constraints (DTD or XML Schema) 处理后导致junit停顿异常
2014-05-21 17:48 9221今天使用eclipse后,看到xml中的警告图标, ... -
logback 异步写入示例
2014-03-13 17:46 10385<?xml version="1.0&qu ... -
JAVA System.getProperty()
2013-07-18 13:22 0java.version Java 运行时环境版本java.v ... -
收藏
2013-06-19 12:19 0昨天去XX公司笔试,结果,有个填空是问我Java检查内存状态 ... -
js画图--mxgraph--codec.html 编辑框
2013-02-19 17:30 2305<!Doctype h ... -
异常:Java compiler level does not match the version of the installed...
2013-02-07 00:05 2130错误信息如下: MyEclipse 下Desc ... -
JAVA程序 通过IP地址 获取MAC地址
2012-08-06 11:51 6359我们都知道通过在电脑上敲 cmd 后,输入ipconfig - ... -
MAXIMO系统Birt报表开发指南--report篇
2012-07-26 09:47 0一、 概述 二、 名词解释 三、 流程 ... -
MyEclipse 安装class文件反编译插件
2012-06-05 10:51 2557本文是我通过学习BlogJava里断点的文章, ... -
Oracle 利用储存过程插入循环插入大量数据方法
2012-05-22 22:38 13800当我们进行测试数据或者进行某种大数据量的时候,可以用一下语句进 ...
相关推荐
如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同!!!! 如果两个对象不同(即用equals比较返回false),那么它们的hashCode值可能相同也可能不同。 如果两个对象的hashCode相同...
equals方法比较对象的是否相同 ==比较两个对象的内存地址 如果想表示对象的内容相同,返回true,则重写此方法 hashCode 返回一个hash code码,Integer,内存地址有关的hash算法 如果equal返回true的话,hashCode...
两个原则: hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能...
两个对象的 hashCode()相同,则 equals()也一定为 true,对 吗? final 在 java 中有什么作用? java 中的 Math.round(-1.5) 等于多少? String 属于基础的数据类型吗? java 中操作字符串都有哪些类?它们之间有...
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什么作用? java 中操作字符串都有哪些类?它们之间有什么区别? 如何将字符串反转? String 类的常用方法都有那些? 接口和抽象...
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4. final 在 java 中有什么作用? 5. java 中的 Math.round(-1.5) 等于多少? 6. String 属于基础的数据类型吗? 7. java 中操作字符串都有...
•Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用...
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 3 4. final 在 java 中有什么作用? 4 5. java 中的 Math.round(-1.5) 等于多少? 4 6. String 属于基础的数据类型吗? 4 7. java 中操作字符串都...
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们...
如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 序号 方 法 说 明 1 String getMessage() 返回描述异常的消息 2 String toString() 返回关于...
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4. final在 java 中有什么作用? 5. java 中的 Math.round(-1.5) 等于多少? 6. String 属于基础的数据类型吗? 7. java 中操作字符串都有哪些类?...
两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hashCode,这句话对不对?(2017-11-14-wl) 是否可以继承 String (2017-11-14-wl) 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,...
换句话说,两个人可能重名,但是两个Person对象应该包含两个独立的Name对象,只不过这两个Name对象具有“同样”的值。 组件的值可以为空,其定义如下。 每当Hibernate重新加载一个包含组件的对象,如果该组件的所有...
Person 类定义了 Address 和 Country 对象,具体两个类实现见上。 无注解属性默认值: • 属性为简单类型,则映射为 @Basic • 属性对应的类型定义了 @Embeddable 注解,则映射为 @Embedded • 属性对应的类型...
注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法 @Id & @GeneratedValue(strategy= GenerationType.IDENTITY) 自动增长,适用于支持自增字段的数据库 mapper Mapper ...
//关闭两个线程 ((OutHandler)map.get("error")).destroy(); ((OutHandler)map.get("info")).destroy(); System.out.println("停止命令-----end commond"); //关闭命令主进程 ((Process)map.get(...
规律:一个数等于前两个数之和 //计算斐波那契数列(Fibonacci)的第n个值 public class Fibonacci{ public static void main(String args[]){ int n = Integer.parseInt(args[0]); int n1 = 1;//第一个数 int n2...