面试题(二)2020年2月28日

2020-02-28  本文已影响0人  别点了填写不了昵称

Java 中的 equals 和 == 的区别

为了探究两者的关系,我们从 Java 中的数据类型开始谈起:

  1. JDK 中规定了两种数据存放的位置,堆和栈。
    我们常说的基本数据类型是放在栈内的。而对象是放在堆内。在Java中,只有特定的类型可以放在栈上,比如咱们刚才说到的基本数据类型。放在堆上的内容,在栈上都有一个地址指针,对应着放着对象的堆内存地址。
  2. 所有的 equals 方法都是继承自 Object 类
    在Java API 文档中,我们找到 Object 类的 equals 方法


    Object 的equals 方法

    Java 文档中说,Eques方法在非空对象引用上实现等价关系。并举了4个例子

这里,我们知道了equal函数的大致作用了,就是为了判断,传入的参数到底是不是我自己。

那么就清晰明了了
也就是说,要先和自己相比。然后是看是不是自己的实例,在比较值。


Boolean 的 equals 方法
String 的 equals 方法

聪明的大家肯定看到了,为什么String 的 equals方法有判断 this == anObject 而 Boolean 没有。
因为 String 有空构造函数,而 Boolean没有空构造函数。所以,Boolean 每创建一个实例,就是一个新的实例,肯定不等于自己,而 String则不然。


String 无参构造器
Boolean 构造器
  1. 看到这里,我们发现,所有对象的equals方法都用到了==
    那么聪明的你也踩到了==是用来判断他们的内存地址和所存的 values 是否在值上相同。
上一篇 下一篇

猜你喜欢

热点阅读