Java 关于 equals与操作符==的区别
来源:互联网 发布:电视直播软件清晰度 编辑:程序博客网 时间:2024/06/05 05:39
在java语言中,经常容易引起大家疑惑的一个部分就是 equals 与 ==的区别,到底他们都有哪些区别呢?
我们首先来追本溯源,看看equals到底是从哪里来的?它最原本的机制是什么样子的?
在java中所有对象的都有一个父类就是Object,既然针对每个对象都可以调用equals,那么自然这个equals也是父类应该有的方法。
(实在不知道这个注释怎么粘贴,凑合看吧)
public boolean equals(Object obj) {return (this == obj);}
大致意思就是,equals方法是用来被设计成非空对象之间用来判定是否是同一个对象的方法。任何对象的equals方法必须符合五个标准
- 自反性
- 对称性
- 传递性
- 一致性
- 任何非空 x.equlas(null) 应该返回为false
需要特别注意的是如果要复写equals方法的话,大部分都要复写hashCode()用于保证相对的对象一定要hash值一致。
可以看到它的方法体,也是用到了==操作符,所以默认情况下,二者是相同的。
我们经常看到的不同,原因就是String这个类复写了equals()方法,那么我们具体看一下String的equals怎么实现的
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
同样复写了hashCode
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }
如上我们在源码中看到的,在String这个类中,只要对象的值相等就可以认为是equals。
所以总体来说就是,如果两个对象满足==,那么一定满足equals,相反则不一定成立。
当然复写equals方法的类很多 例如AbstractList,它则判断list集合中的内容,以及顺序是相同则认为是equals。Integer等。
阅读全文
0 0
- Java 关于 equals与操作符==的区别
- java学习笔记:关于==与equals的区别
- 关于equals与"=="的区别
- Java 字符串比较操作符 == 与 equals 的区别
- Java中==操作符与equals方法的区别
- java4Android(23):equals 的使用方法 instance 操作符【==与equals方法的区别】
- ==和equals()区别(操作符==与对象equals方法的不同)
- Java ==与equals()的区别
- java equals与== 的区别
- java == 与 equals的区别
- java equals与== 的区别
- java equals 与 == 的区别
- Java “==”与“equals"的区别
- Java的==与equals区别
- java-==与equals的区别
- Java“==”与“equals()”的区别
- java ==与equals的区别
- Java基础:equals与"=="操作符的比较
- JAVA循环结构
- Android沉浸式状态栏实现
- Android初级开发(四)——补充1、Video View的应用
- linux开发之交叉编译器环境搭建系统兼容的问题
- 翻转字符串
- Java 关于 equals与操作符==的区别
- 这篇关于bitset类型的
- 算法系列——Group Anagrams
- ejs 中如length为0 会报错,要过滤一下,并不是和原有的div完全一样的;
- 编译Hadoop并给HBase应用Snappy本地库
- 开发中的辅助工具
- Bootstrap—轻松制作漂亮表格(table)
- Dijkstra&&Floyd
- 安装IntelliJ IDEA的一些配置