都是判相等,对于基本变量没区别,只是对动态变量(即对象)有区别:

  1. ==:引用相等(reference comparison)。对于对象引用,即判断引用值也就是地址是否相等。即如果Object a,b,则 a==b 表示引用a和b的地址是否相等。
  2. equals():引用指向的内容相等(value comparison)。是Object的方法,其实现是 return this == inputObject。但是常常会被覆盖,如String,Integer等都覆盖了该方法,判断对象引用所指向的内容是否相等
  • a==b 则 a.equas(b) 一定正确,但反之则不一定,要看对象a对于equals的具体实现。如果采用默认的object实现,则反之亦然。
  • 有规范要求,如果a.equals(b),则 a.hashcode() == b.hashcode();反之则不一定,即如果hashcode()相等,a.equals(b)不一定正确,这是因为hashcode可能存在冲突的问题。因此如果要覆盖重写equals方法,要注意修改hashcode()方法,以满足规范。

了解常用数据结构对equals的实现,对于处理实际问题也很必要:

  • Object:定义了object()方法,实现是return this == inputObject。对于其他对象对Object的实现定义了要求:对称性、自反射性、传递性、一致性、空不等。见下图一。
  • Collection:对于equals()方法没有其他特别要求。即如果一个类implements Collection,那么除非有特殊必要,一般不建议覆盖Object的equals方法;见下图二
  • ListSet:以List为例,要求a、b都是List,size相等,且在相同位置包含相同元素。(这里相同元素采用的是元素的equals方法)。Set因为没有顺序,所以不要求在相同位置,只要求一个Set的所有元素在另一个Set中都有。见下图三和图四。
  • AbstractMap:两个Map相等,判断两个map包含的映射相等。映射相等判断键值对是否相等:key相等采用的是containsKey方法,其中做这样的判断:key==null ? k==null : key.equals(k)).。对于值相等,采用 value.equals(m.get(key))。即键值对相等采用该键值对象本身的equals方法。见图五。
  • HashMap:继承AbstractMap的equals方法。特别说明,它的put方法中判断是否某键值是否已存在也采用的是:(k = p.key) == key || (key != null && key.equals(k)))

图一: Object.equals()

图二:Collection.equals()

 图三:List.equals()

图四:Set.equals()

图五:AbstractMap.equals()

JAVA equals, ==的更多相关文章

  1. 总结Java equals()和hashCode()的联系

    Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...

  2. java equals和==的区别

    大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...

  3. java equals 和 "==" 比较

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

  4. Java equals 和 hashcode 方法

    问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...

  5. Java equals的一个坑

    public class StringEqualsObject { public static void main(String[] args) { String name="Tom&quo ...

  6. java equals和==区别及string类的说明

    一.equals和==的区别 1.1.equals之string字符串的比较 1.1.1.源码如下图 if (this == anObject) {            return true;  ...

  7. java :equals()和hashcode()方法的结合使用

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  8. java equals()方法

    java基础学习总结--equals方法 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class Te ...

  9. java equals 和 == 的区别

    )1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...

  10. java equals == contentEquals

    equals与== 经常用于比较,用法如下:字符串比较相同用equals,普通数值(基本数据类型)比较用==, contentEquals下面讲 理论准备: java的基本类型如int.float,d ...

随机推荐

  1. 剑指Offer25 二叉搜索树转换为排序双向链表

    /************************************************************************* > File Name: 25_BSTCon ...

  2. 京东2017 C++一面

    一面直接跪,日 1. 重写和重载的区别                            答的一般 2. C++内存分配方式                           不会 3. TCP ...

  3. LeetCode 55

    Jump Game Given an array of non-negative integers, you are initially positioned at the first index o ...

  4. Java中创建操作文件和文件夹的工具类

    Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  5. hdu 3594 仙人掌图

    思路:利用它的几条性质 #include<set> #include<map> #include<cmath> #include<queue> #inc ...

  6. Hartree-Fock理论(更新中)

    预备知识: 基组 分子轨道基本概念与Hartree Product 平均场与Fock算符 在忽略分子中电子的相互作用时,我们有了一个粗糙的模型,虽然非常容易求解,但是描述的精确程度非常差. 考虑电子的 ...

  7. HTML5游戏开发,剪刀石头布小游戏案例

    剪刀石头布,非常可爱的小游戏,相信大家都非常的怀念这款小游戏,小时候也玩过很多次,陪伴着我的童年的成长,现在是不是还会玩一下,剪刀石头布游戏的规则我们都知道是:剪刀剪布,石头砸剪刀,布包石头.跟朋友. ...

  8. jquery简单的图片切换效果,支持pc端、移动端的banner图片切换开发

    详细内容请点击 无意中看见了两年前写的一个图片切换,那会儿刚刚学习网页制作,可以说是我的第一个处女座的jquery图片切换效果.无聊之余对它的宽度稍稍做了一下修改,变成了支持pc端.手机端全屏的ban ...

  9. 【CSS3】---结构性伪类选择器—nth-child(n)+nth-last-child(n)

    结构性伪类选择器—nth-child(n) “:nth-child(n)”选择器用来定位某个父元素的一个或多个特定的子元素.其中“n”是其参数,而且可以是整数值(1,2,3,4),也可以是表达式(2n ...

  10. 浅谈.NET Micro Framework性能优化 转自 软件中国

    .NET Micro Framework的可剪裁性,高定执行,和天生对硬件高集成度都让它的前途一片光明.当然,它现在还很年轻,就发布的SDK v3.0来看,它还有很长的路要走. 废话不说,就这几个月我 ...