==、hashCode、equals的区别

一、概述

1、概念

  • == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系

  • equals : Object 的 实例方法,比较两个对象的content是否相同

  • hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数


二、关系操作符 ==

1、操作数的值

  • 基本数据类型变量

    在Java中有八种基本数据类型:

    浮点型:float(4 byte), double(8 byte)

    整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)

    字符型: char(2 byte)

    布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值”true”和”false”)

    对于这八种基本数据类型的变量,变量直接存储的是“值”。因此,在使用关系操作符 == 来进行比较时,比较的就是“值”本身。要注意的是,浮点型和整型都是有符号类型的(最高位仅用于表示正负,不参与计算【以 byte 为例,其范围为 -2^7 ~ 2^7 - 1,-0即-128】),而char是无符号类型的(所有位均参与计算,所以char类型取值范围为0~2^16-1)


  • 引用类型变量
    在Java中,引用类型的变量存储的并不是“值”本身,而是与其关联的对象在内存中的地址。比如下面这行代码,

    String str1;

这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。而通过 new 来产生一个对象,并将这个对象和str1进行绑定:

str1= new String("hello");

那么 str1 就指向了这个对象,此时引用变量str1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的字符串”hello”。这里面的引用和 C/C++ 中的指针很类似。


2、小结

因此,对于关系操作符 ==:

  • 若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的是否相等

  • 若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象。


三、equals方法

1、来源
  equals方法是基类Object中的实例方法,因此对所有继承于Object的类都会有该方法。

在 Object 中的声明:

    public boolean equals(Object obj) {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值