• 2 Java中 == 和 equals 和 hashCode 的区别


    ==

    ==是一个比较运算符;

    若比较的是基本数据类型,则比较的是值;

    若比较的是引用数据类型,则比较的是它们在内存中的内存地址。

    说明:对象是存放在堆中,栈中存放的是对象的引用,因此==是对栈中的值进行比较,若返回true,代表变量的内存地址相等。

    equals

    equals是Object类的一个方法,底层是通过“==”实现的;

    //Object类equals()方法源码
    public
    boolean equals(Object obj) {   return (this == obj); }

    比较的是引用类型的数据内存地址是否相等(即,是不是同一个对象)。

    说明:若类中重写了equals方法,就要根据具体代码实现来确定,一般在开发中重写了equals方法比较的就是对象的内容。

    hashCode

    hashCode也是Object类的一个方法,且是一个native方法,主要用于计算对象的哈希码值;

    public native int hashCode();

    之所以有hashCode方法,是因为对象在进行批量比较时,hashCode要比equals快。

    比如:当我们向HashMap中添加新元素时,必须保证key是唯一的,这时就会涉及到key的比较,首先调用元素的hashCode()方法, 然后在进行&运算,定位到它在数组中的位置,若该位置没有元素则可以直接存储;若该位置有元素,再调用它的equals方法与新元素进行比较,若相同说明key重复,不能存储。若不相同,则将其存到该位置的链表头部。

  • 相关阅读:
    Pearls POJ 1260 DP
    The Cow Lexicon DP
    矩形嵌套
    POJ 3061 Subsequence 尺取
    动物统计加强版 Trie 树
    codevs 1422 河城荷取
    cogs 944. [東方S3] 藤原妹红
    codevs 2830 蓬莱山辉夜
    cogs 998. [東方S2] 帕秋莉·诺蕾姬
    cogs 920. [東方S1] 琪露诺
  • 原文地址:https://www.cnblogs.com/xilichenbokeyuan/p/6385448.html
Copyright © 2020-2023  润新知