equals和==及hashcode的区别
来源:互联网 发布:组织架构图 知乎 编辑:程序博客网 时间:2024/05/20 18:03
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
比较类里面的数值是否相等时,用equals()方法;当 测试两个包装类的引用是否指向同一个对象时,用==。
如果一个类没有自己定义equals 方法,那么它将继承Object 类的equals 方法,Object 类的equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals 方法,它默认的equals 方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。例如:
String a=new String("foo");
String b=new String("foo");
两条new 语句创建了两个对象,然后用a/b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a 和b 中存储的数值是不相同的,所以,表达式a==b 将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
Java对于eqauls方法和hashCode方法是这样规定的:
1.如果两个对象相同,那么它们的hashCode值一定要相同;
2.如果两个对象的hashCode相同,它们并不一定相同(这里说的对象相同指的是用eqauls方法比较)。
如不按要求去做了,会发现相同的对象可以出现在Set集合中,同时,增加新元素的效率会大大下降。
3.equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
- equals和==及hashcode的区别
- "=="、equals和hashCode的区别
- “==”、equals 和 hashCode 的区别
- hashcode equals和==的区别
- java ==和equals、equals和hashCode的区别
- java中的 hashcode() 、equals() 和==的区别
- Java中equals方法、==和hashCode的区别
- java中equals,hashcode和==的区别
- 详细解释 hashcode equals() "==" 的区别和联系
- java中equals,hashcode和==的区别
- ==、equals、hashcode的区别和联系
- java中“==”、equals和hashCode的区别
- JAVA学习笔记 ---equals、hashcode和==的区别
- hashcode、equals和==之间的区别
- java中equals,hashcode和==的区别
- Java中==,equals和hashCode的区别
- hashCode与equals和==的区别与联系
- java中equals,hashcode和==的区别
- 女孩你要懂
- Jquery实现边输入边查询,仿百度,并可以选择查询的值赋到输入框
- CSDN的博客搜索功能太弱,教你怎么搜索自己博客的文章
- android以流的方式读取文件
- 随机抽取的sql语句
- equals和==及hashcode的区别
- 无锁队列的实现
- 代码部署中,如何更新core.php
- 【C】没有注意系统对函数参数的求值顺序的处理方法
- 报winsock被破坏,网络不通,ping报错,开机慢
- Objective C--观察者模式
- Linux CentOS memcached 安装
- 实用网站记录
- 史上最全的hadoop