在进行判断操作时,常常会用到==或者equals()进行等价判断,那么两者究竟有什么区别呢,下面整理一下个人理解。

  • 简单介绍:
    ==是一种引用相等性比较符,判断引用到堆上同一个对象的两个引用是相等的。要比较两个基本类型是否相等,一般使用==。示意图:

    equals()方法是一种对象相等性比较方法,判断堆上的两个不同对象在意义上是相同的。如果一个变量指向的数据为对象类型,如java的包装类(String等),则一般使用equals()进行比较。示意图:

  • 例:

     int a = 10;
    int b = 10;
    //那么a == b将会返回true。 String a = new String("aa");
    String b = new String("aa");
    //那么a == b将会返回false,a.equals(b)返回true。
  • StackOverFlow中对equals()的使用提出了几个需要注意的地方:

    equals will only compare what it is written to compare, no more, no less.

    • equals方法只会实现方法中所写的比较逻辑。

    if a class does not override the equals method, then it defaults to the equals(Object o) method of the closest parent class that has overridden this method.

    • 如果没有重写equals(),默认使用该类最近且重写了equals()的父类方法。需通过api查阅该父类equals()的实现逻辑,如果不符合你想要实现的,要重写equals()和hashCode()两个方法。

    If no parent classes have provided an override, then it defaults to the method from the ultimate parent class, Object, and so you’re left with the Object#equals(Object o) method. Per the Object API this is the same as ==; that is, it returns true if and only if both variables refer to the same object, if their references are one and the same. Thus you will be testing for object equality and not functional equality.

    • 如果没有父类重写equals(),则默认使用Objec类的equals()。通过API可知Object类的equals()实现逻辑与==一样。

    Always remember to override hashCode if you override equals so as not to “break the contract”. As per the API, the result returned from the hashCode() method for two objects must be the same if their equals methods shows that they are equivalent. The converse is not necessarily true.

    • 重写equals()的同时需重写hashCode(),查阅API可知,如果equals()返回true时,两个对象的hashCode也应该相等,否则不能保证结果完全正确。

JAVA中equals()与==的区别详解的更多相关文章

  1. java中equals和==的区别详解

    java中的数据类型,可分为两类: 1.基本数据类型. byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的 ...

  2. Java中instanceof和isInstance区别详解

     一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...

  3. Java 中的异常和处理详解

    Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...

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

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  5. 【转】Java中equals和==的区别

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

  6. 2018.8.1 Java中的反射和同步详解

    为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他 ...

  7. 关于java中equals与==的区别的小实验

    java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...

  8. 【Java】equals()与hashCode()方法详解 (转)

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  9. java中.equals和==的区别?

    Java中的equals是十分重要的,和= =要区别开来,孙卫琴的JAVA面向对象编程一书对这个做了阐述,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式   ...

随机推荐

  1. black hack

    黑客技 关于在不知道系统的情况下 long long 的使用时 那么 #ifdef WIN32 #define LL "%I64d" #else #define LL " ...

  2. luogu P1304 哥德巴赫猜想

    题目描述 输入N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想. (N为偶数). 如果一个数,例如10,则输出第一个加数相比其他解法最小的方案.如10=3+7=5+5,则10=5+ ...

  3. Java---杨辉三角简易解法(通俗易懂,逻辑严密)

  4. 如何部署和运行Scut服务器及游戏:Windows篇

    概述 Scut游戏引擎是一个永久免费的全脚本游戏服务器框架,采用MVC框架设计,简化数据库设计和编码工作:降低对开发人员的开发难度:同时提供了丰富的类库和API接口. 一.    安装环境 必须安装的 ...

  5. Path特效之PathMeasure打造万能路径动效

    前面两篇文章主要讲解了 Path 的概念和基本使用,今天我们一起利用 Path 做个比较实用的小例子: 上一篇我们使用 Path 绘制了一个小桃心,我们这一篇继续围绕着这个小桃心进行展开: ----- ...

  6. wmware下载地址

    https://my.vmware.com/cn/group/vmware/info?slug=desktop_end_user_computing/vmware_workstation/8_0 粗体 ...

  7. Windows脚本\批处理命令学习笔记

    1.为新建变量赋值: set 变量=值 2.输出变量的值 echo %变量% 3.关闭批处理中命令行的显示(默认是显示命令行的) 在文件開始处增加:echo off 若需又一次显示:echo on 若 ...

  8. git工程迁移(修改提交服务器地址)方法

    git remote set-url [--push] <name> <newurl> [<oldurl>]git remote set-url --add [-- ...

  9. 转:代码管理技巧——两步创建本地SVN服务器图文教程

    from: http://www.cnblogs.com/tianhonghui/archive/2012/07/22/2603454.html   当我们进行开发的时候,不论是独立开发还是处在团队中 ...

  10. python:字符串的连接

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...