equals()与==

equals()和==的区别

两个都是用来比较值大小的:

  • ==主要是用来比较两个引用是否指向堆内存的同一地址,equals(object)主要用来比较两个对象的值是否相同
  • 基本数据类型使用==比较,使用equals()将编译失败
  • 一般在对象中比较需要重写equals()方法,不然将导致使用object中的equals()方法,比较两个对象的指向地址是否相同
  • *使用equals()方法需要重写hashcode()方法

一、String中的equals和==

@requires_authorization
    public class TestString {

    public static void main(String[] args) {

    String s1 = "Monday";

    String s2 = new String("Monday");

    if (s1 == s2)

    System.out.println("s1 == s2");

    else

    System.out.println("s1 != s2");

    if (s1.equals(s2)) System.out.println("s1 equals s2");

    else

    System.out.println("s1 not equals s2");

    }

    }
... prompt'''
---------------------
    s1 != s2

    s1 equals s2

第一个程序创建一个字符串s1会去缓冲池里面寻找,然后将地址指向缓冲池中,而通过new一个对象s2,会指向堆中一个地址,两个句柄指向不同的地址,所以使用==不相等,但是里面的内容是相等的,所以equals()方法相等。

二、hashCode

在一般的应用中你不需要了解hashcode的用法,但当你用到hashmap,hashset等集合类时要注意下hashcode。
你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。
所以这里要匹配2部分,hashcode和equals但假如说你new一个object作为key去拿value是永远得不到结果的,因为每次new一个object,这个object的hashcode是永远不同的,所以我们要重写hashcode,你可以令你的hashcode是object中的一个恒量,这样永远可以通过你的object的hashcode来找到key的地址,然后你要重写你的equals方法,使内存中的内容也相等。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值