龙空技术网

java之equals和=的区别,总结的非常清晰,再也不怕搞混淆了

心中有棵白杨树 3707

前言:

如今咱们对“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