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

  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. 怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)

    Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33015   Accepted ...

  2. 剑指Offer34 数组中的逆序对

    /************************************************************************* > File Name: 34_Invers ...

  3. hdu-5694 BD String(分治)

    题目链接: BD String Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) ...

  4. Android apk 的安装过程

    Android应用安装有如下四种方式 1.系统应用安装――开机时完成,没有安装界面 2.网络下载应用安装――通过market应用完成,没有安装界面 3.ADB工具安装――没有安装界面. 4.第三方应用 ...

  5. css去掉默认的下拉,实现用户自定义的下拉列表

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. C# 简单邮件群发通用类

    public static class Email { /// <summary> /// 发件人 /// </summary> public static string ma ...

  7. PHP与javascript实现变量交互

    <?php /** * 本例是PHP和javascript交互的例子,php中的值赋给js变量中,前提是这个php变量必须有值才行,就算是假分支中. * 比如php中的$flags在本例中为tr ...

  8. 六、Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  9. excel上传与下载

    后台:        @RequestMapping(value = "/uploadFile.do", method = RequestMethod.POST)  public ...

  10. (转)Linux下Oracle启动、建立表空间、用户、授权、数据库导入导出

    Linux系列 启动1.启动数据库实例,分为两步:第一步,启动监听:第二步,启动数据库实例. 1.1进入到sqlplus启动实例 [oracle@redhat ~]$ su - oracle      ...