ref:http://www.cnblogs.com/skywang12345/p/3324958.html

1、==作用:

  java中的==用来判断两个对象的地址是否相等;当对象是基本数据类型时,可以用来判断值是否相等?这句话有毛病!!!(直接用数值时?)

  http://www.cnblogs.com/whtblog/p/9029208.html中的part2.2,中的例子两个String也不能用"=="来判断值相等。

2、equals():

  Object类中定义的equals()方法, return (this == obj); 通过==来判断,很多JAVA类重写了equals方法,java对equals方法的重写要求需满足以下条件: 

1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"。
2. 反射性:x.equals(x)必须返回是"true"。
3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"。
4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"。
5. 非空性,x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"。

  如下:

 @Override
public boolean equals(Object obj){
if(obj == null){
return false;
} //如果是同一个对象返回true,反之返回false
if(this == obj){
return true;
} //判断是否类型相同 ,返回对象的运行时类。
if(this.getClass() != obj.getClass()){
return false;
} Person person = (Person)obj;
return name.equals(person.name) && age==person.age; //调用了String类的equals方法
}

3、hashCode():

  1、在用到散列表时,hashCode()方法才需要重写并发挥作用!

   hashCode():获取哈希码,返回一个int类型的整数。当需要将该类放入散列表(如HashMap)时,才需要用到hashCode方法判断存放地址,在该地址上已存在的对象中用equals去判断值是否相等。如果跳过hashCode判断,有可能出现如下情况:存入对象o1与存在对象o2值(属性值)相同,此时应该用o1替换掉o2,但是由于o1.hashCode()!=o2.hashCode(),(调用的是未重写的hahsCode方法),散列表在哈希码对应的地址处没有元素,则将o1放入该地址。这样造成了HashMap中存在两个相同的对象,违背了HashMap的设计原则。

  2、在如HashMap,Hashtable,HashSet等散列表中,equals()方法的重写需要hashCode()方法的重写,遵循:

    

(1):若o1.equals(o2)==true,则必须有o1.hashCode()==o2.hashCode(),反之不成立;
(2):若o1.equals(o2)!=true,则hashCode可以相等也可以不等;

  

以上纯属个人理解!

    

       

  

Java中hashCode、equals、==的区别的更多相关文章

  1. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

  2. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

  3. Java中==与equals的区别及理解

    区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...

  4. Java中==与equals()的区别

    声明转载来源:http://blog.csdn.net/striverli/article/details/52997927 ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系 ...

  5. java 中 “==” 和 equals 的区别

    转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...

  6. Java 中 == 和 equals 的区别

    有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...

  7. Java中“==”与equals的区别以及equals方法的重写

    一.“==”与equals的区别: (1)==代表比较双方是否相同: 基本数据类型表示值相等. 引用数据类型表示地址相等,即同一个对象. (2)Object中的equals()方法:是否为同一个对象的 ...

  8. java中==和equals的区别(转)

    java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(== ...

  9. JAVA中==与equals的区别

    equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...

  10. Java中==和equals()的区别

随机推荐

  1. [题解]UVA658 It's not a Bug, it's a Feature!

    链接:http://vjudge.net/problem/viewProblem.action?id=22169 描述:有n个漏洞,m个修复漏洞的方法,每种方法耗时不一样,求修复漏洞的最短时间.每种方 ...

  2. HDFS的优缺点

    HDFS是一个分布式文件存储系统,前身来自于Google发布的大数据三驾马车之一GFS (Google File System). HDFS的优点: 1.高容错 hdfs具有很高的容错性,数据自动保存 ...

  3. C#内联函数 特性 MethodImplOptions.AggressiveInlining)

    [MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数 ...

  4. Kubernetes集群搭建(详细)

    kubernetes集群搭建(kubeadm方式) kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具.这个工具能通过两条指令完成一个kubernetes集群的部署: # 创 ...

  5. C++ 删除一个字符串中的指定字符

    Q:一个数字是以xxx,yyy,zzz的字符串形式存储的,将逗号消去并转化为整数输出 方法一:char数组,即定义时s1定义为 char s1[20]的形式: //删除输入字符串中的逗号,并构建新串 ...

  6. gdb调试快速入门

    编译指令 gcc test.c -o test -g -g是加入调试信息,加入源码信息 启动gdb调试 gdb test 进入gdb中 设置参数 set args 10 20 显示参数show age ...

  7. c++11 实现枚举值到枚举名的转换

    效果 ``` ENUM_DEFINE ( Color, Red, Blue, ) EnumHelper(Color::Red) -> "Red" EnumHelper(Col ...

  8. Log4j2详解——XML配置详解

    Log4j2详解--XML配置详解 找到了个很详细的文章链接 https://www.jianshu.com/p/bfc182ee33db

  9. mybatis 日志实现 学习总结03

    日志 1.为什么要使用日志 使用日志能对项目: 调试:日志便于记录程序在之前的运行结果 错误定位 数据分析:日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,对公司下一步的战略方向有一定指引作用. ...

  10. 自己的markdown笔记

    markdown一些语法 记录自己会用的一些markdown语法,不定期更新,用的软件是hroopad,hroopad下载地址点击跳转.这个书写软件对新手还有中文用户比较友好,左边是markdown语 ...