"=="、equals、hashCode之间的区别
1. "=="分为两种情况:
(1) 基本数据类型,比较的是其对应的值是否相等;
(2) 引用类型,比较的是他们在内存中存放的地址(或者说,是否指向同意对象)。
2. equals:
是Object类提供的方法之一,在Object类中的定义就是直接使用"=="进行比较,所以在没有覆盖equals()方法的情况下,equals()与"=="是一样的。
boolean equals(Object o){
return this = o;
}
相比于"==",equals()方法是可以被覆盖的。比如,在一些类库(String,Integer,Date等)中,equals()方法比较的是对象的内容是否相同。如果希望编写的类可以比较该类创建的两个实例对象的内容是否相等是,那么必须要覆盖equals()方法。
3. hashCode:
hashCode()方法是从Object类中继承过来的,也是用来鉴定两个对象是否相等,返回的是对象在内存中地址转换成的一个int值。所以,如果没有重写hashCode()方法,任何对像的hashCode()方法都不是相等的。
hashCode()与equals()的区别:equals()方法是给用户调用的;对于hashCode()方法,用户一般不会去调用它。两者的不同之处在于,hashCode()返回的是int型,比较起来不直观。
一般在覆盖equals()的同时也要覆盖hashCode()。hashCode()的返回值与equals()的关系如下:
(1) 如果x.equals(y)返回true,那么调用这两个对象中任意一个对象的hashCode()方法都必须产生同样的整数结果。
(2) 如果x.equals(y)返回false,那么x和y的hashCode()方法的返回值可能相等,也可能不等。
(3) 如果hashCode()方法的返回值不相等,一定能推出来equals()方法的返回值也不相等。
"=="、equals、hashCode之间的区别的更多相关文章
- 比较运算符compareTo()、equals()、==之间的区别
前言 首先再次强调hashcode (==)和equals的真正含义(我记得以前有人会说,equals是判断对象内容,hashcode是判断是否相等之类): equals:是否同一个对象实例.注意,是 ...
- Java中equals和==之间的区别
今天在写表达式求值的时候,发现了equals和==||!=和!equals()之间是不一样的. 我就从网上搜了搜关于这方面的知识,然后在下面做一个总结: Java中有两类数据类型: 基本数据类型(Pr ...
- 比较运算符compareTo()、equals()、==之间的区别与应用总结
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配 ...
- (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...
- JavaSE的包装类,自动装箱和自动拆箱 ,字符窜转换,toString(),equals(), hashCode()的区别
一.基本数据类型和包装类 包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示: Primitive-Type Wrapper-Class byte ...
- equals方法和==的区别
equals方法和==的区别 首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = &quo ...
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
- 你真的会玩SQL吗?EXISTS和IN之间的区别
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别
要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...
随机推荐
- Cobaltstrike系列教程(三)-beacon详解
0x000--前文 Cobaltstrike系列教程(一)-简介与安装 Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel 0x001-Beacon详解 1 ...
- handy源码阅读(三):SafeQueue类
SafeQueue类继承与信号量mutex(用于加锁),nonocopyable 定义如下: template <typename T> struct SafeQueue : privat ...
- centos 7 网卡绑定 bond0 开机无法自启
https://blog.csdn.net/u012881151/article/details/54910847 1.环境CentOS Linux release 7.2.1511 (Core)li ...
- 04 全局配置,java 编意默认版本,1.6.修改配置
https://www.cnblogs.com/liu-s/p/5371289.html <!-- 修改Intellij Idea 创建maven项目默认Java编译版本 --> < ...
- layer.js插件
官方网址: http://layer.layui.com/
- js/jq 小功能函数
1.点击复制内容到剪贴板 function copyToClip(str) { var save = function(e) { e.clipboardData.setData('text/plain ...
- elasticsearch 集群搭建及启动常见错误
1.系统环境 三台服务器(最好是单数台,跟master选举方式有关),确保机器互相ping的通,且都需要装了jdk 8环境,机器IP和 elasticsearch 的节点名称如下: cluster n ...
- SVN 忽略添加文件和文件夹
你添加的文件和文件夹是没有加入版本控制的,是你新添加的,接下来的设置才有用 忽略这个文件的方式有两种 第一种方式 添加svn:ignore 右键文件-->TortoiseSvn--> ...
- Wildfly安装以及集成idea(mac)
文章目录 Linux发布运行 下载 集成idea Linux发布运行 首先说一下在linux环境,只需要将war包上传到wildfly-8.2.0.Final/standalone/deploymen ...
- Linux 中设置进程通过 systemctl 启动
对于某些脚本或需要启动命令的程序,可以通过创建 xx.service 服务文件来使用 systemctl 控制. 例如,对于 docker-compose,其后台启动且忽略输出信息的命令为: $ no ...