前言:
如今咱们对“javaequals”大致比较关怀,姐妹们都想要了解一些“javaequals”的相关知识。那么小编在网络上汇集了一些关于“javaequals””的相关文章,希望兄弟们能喜欢,同学们快快来了解一下吧!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
equals和(==)的区别
把握住一下几点就可以了:
(1)基本数据类型:byte,short,char,int,long,float,double,boolean;他们之间的比较应该用(==),比较的是他们的值。
(2)复合数据类型(例如一个普通的对象),如果用(==)进行比较,则比较的是他们的引用是否相同,即内存地址是否相同。所以除非是同一个new出来的东西,比较结果才为true,都则为false.
(3)Object中有一个equals方法,默认比较和(==)一样,是 比较内存地址是否相同的。所以如果没有重写这个方法,用equals比较则比较的还是内存地址是否相同。但是一些类重写了这个方法,例如String,Date,Integer等,用equals比较则比较的是值!
(4)在这里强调非常重要的一点,如果你想定义一个类的两个对象是否相等,一定要重写它的
equals方法和hashCode方法,而且保证euqals方法相等的同时,hashCode方法也必须相等,一
定一定要按照这个规则来!!!(最简单的就是equals方法和hashCode方法判断相等的依据相同就
可以了)。举例如下:
所以在面临任何数据类型比较时,分析(==)和equals的区别,你把握住以上几点就可以了,基本上你得到的结果应该就是你想要的。
=============================
总结:
最后再强调一下,因为太重要了:
(1)如果两个对象相等,则必须保证equals返回true,且hashcode值也必须相等!
(2)因为equals默认与"=="一样,是比较地址的,因此如果不被覆盖,则两个
对象比较永远不会返回为true。同理,hashcode的计算方式默认计算方式也是根据内存的,
因此若不被覆盖,两个对象也绝对永远不会有相同的hashcode值。
(3)因此要记住,重写equals也必须要重写hashcode,且保证equals返回true时,
hashcode也是相同的。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
标签: #javaequals