JAVA中equals()与==的区别详解
在进行判断操作时,常常会用到==
或者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()与==的区别详解的更多相关文章
- java中equals和==的区别详解
java中的数据类型,可分为两类: 1.基本数据类型. byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的 ...
- Java中instanceof和isInstance区别详解
一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- 2018.8.1 Java中的反射和同步详解
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他 ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
- 【Java】equals()与hashCode()方法详解 (转)
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...
- java中.equals和==的区别?
Java中的equals是十分重要的,和= =要区别开来,孙卫琴的JAVA面向对象编程一书对这个做了阐述,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式 ...
随机推荐
- 全面了解Nginx主要应用场景
http://www.raye.wang/2017/02/24/quan-mian-liao-jie-nginxdao-di-neng-zuo-shi-yao/
- PHP执行linux系统命令
本文是第一篇,讲述如何在PHP中执行系统命令从而实现一些特殊的目的,比如监控服务器负载,重启MySQL.更新SVN.重启Apache等.第二篇<PHP监控linux服务器负载>:http: ...
- Koa2 + Mongoose + Log4js 持久化日志
代码地址如下:http://www.demodashi.com/demo/12466.html 之前做的项目是采用 Express 框架进行搭建的,其中的日志管理采用了 winston + Post ...
- VueJS事件处理器v-on:事件修饰符&按键修饰符
事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue.js通 ...
- python 中给文件加锁——fcntl模块
如果没有fcntl模块则用 sudo pip install fcntl安装 模块简单说明: 打开文件,不存在则创建之 f = open('./test','w') fcntl.flock(f,fcn ...
- 【Unity 3D】学习笔记三十三:游戏元素——天空盒子
天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天.让人惊叹不已.事实上天空这个效果没有什么神奇的仅仅需用到天空盒子这个组件即可.能够将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和全部的游戏元素 ...
- ETL拉链算法汇总大全
拉链算法总结大全: 一.0610算法(追加) 1.删除仓库表的载入日期是本次载入日期的数据,以支持重跑 delete from xxx where start_dt >=$tx_date; 2. ...
- Chrome自带恐龙小游戏的源码研究(四)
在上一篇<Chrome自带恐龙小游戏的源码研究(三)>中实现了让游戏昼夜交替,这一篇主要研究如何绘制障碍物. 障碍物有两种:仙人掌和翼龙.仙人掌有大小两种类型,可以同时并列多个:翼龙按高. ...
- linux支持的machine-types
在内核文件中arch/arm/tools/mach-types定义目前内核支持的板卡.芯片等: ##machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number ...
- PowerBuilder -- 日期控件
MonthCalendar