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

  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. 把当前时间(NSDate)转为字符串 - 获取当前时间的Day

    1.把当前时间转为字符串 (NSDate与北京时间相隔8小时,格式化之后就是北京时间) NSDate *date = [NSDate date]; NSDateFormatter *dateForma ...

  2. Linux之cuda安装

    1.下载https://developer.nvidia.com/cuda-downloads 2.双击下载好的deb进行安装 3.sudo apt-get install cuda 4.As par ...

  3. SQL server 2008 建立新用户

    进入Instance下的‘安全性’->登录名, 可以选择SQL server 验证,‘强制实施密码策略’.’状态‘ 为启用. 在使用的数据库下‘安全性’->登录名,选择‘登录名’,输入之前 ...

  4. 【JS Note】字符串截取

    Js中字符截取常用的三个函数:slice().substring().substr(). slice(): slice(start,[end]) 第一个参数代表开始位置,第二个参数代表结束位置的下一个 ...

  5. 关于SVN下载代码和Android Studio里面导入别人代码build tools不一致问题总结

    项目build tools的sdk我没有 网络问题没法下载. 解决问题 方法 1.下载对应的SDK.需要VPN,或者FQ 2.将bulid.gradle的内容用下面的内容替换 // Top-level ...

  6. js jquery jquery.wordexport.js 实现导出word

    由于工作需要,将一个页面导出word文档,主要是简历!经过百度搜索之后,没找到结果,无奈之下只能求助Google,意外发现jquery一款插件可以实现这个功能!而且效果还算可以! 基本可以实现想要的功 ...

  7. 第六篇、抽屉效果+UITabBarController(主流框架)

    依赖于第三方的框架RESideMenu 1.AppDelegate.m中的实现 - (BOOL)application:(UIApplication *)application didFinishLa ...

  8. hdu 1716(dfs)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1716     排列2   Problem Description Ray又对数字的列产生了兴趣:现 ...

  9. 利用CSS3打造一组质感细腻丝滑的按钮

    CSS3引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果.下面这些发出闪亮光泽的按钮,漂亮吧?把鼠标悬停在按钮上,还有动感的光泽移动效果. 温馨提示:为保证最佳的效果, ...

  10. 分享10款激发灵感的最新HTML5/CSS3应用

    1.HTML5/CSS3实现iOS Path菜单 菜单动画很酷 Path菜单相信大家都不陌生吧,它在iOS中非常流行,今天我们要分享的菜单就是利用HTML5和CSS3技术来模拟实现这款iOS Path ...