Java基础知识_equals和==

==:它的作用是判断两个对象的地址是否相等,即判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)

equals():它的作用也是判断两个对象是否相等。它一般有两种情况:

情况一:类没有覆盖equals方法,则通过equals比较类的两个对象时,等价于通过“==”比较这两个对象

情况二:类覆盖了equals方法。一般我们都覆盖equals方法用来比较两个对象内容是否相等,内容相等则返回true

String中的equals方法是被重写过的,因为object的equals方法是比较对象的内存地址而String的equals方法比较的是对象的值。

当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个String对象。

等价关系

1、自反性

x.equals(x)   //true

2、对称性

x.equals(y)==y.equals(x) //true

3、传递性

if(x.equals(y)&&y.equals(z))

x.equals(z);   //true

4、一致性

多次调用equals方法结果不变

5、与null比较

对任何不是null的对象调用equals(null),结果都是null

实现:

      一、检查是否是同一个对象的引用,如果是直接返回true

      二、检查是否是同一个类型,如果不是直接返回false

      三、将Object对象进行转型

   四、判断每个关键域是否相等

hashCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值 相同的两个对象不一定等价。 在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象散列值也相等。

posted @ 2019-08-03 22:37  chyblogs  阅读(175)  评论(0)    收藏  举报