zoukankan      html  css  js  c++  java
  • ==与equals与hashCode的区别联系。

    前言:对于引用类型的变量,它涉及到两块内存,一块是堆中的内存,用于存放new出来的对象(就是对象的具体内容);另一块是栈内存,用来存放变量在堆内存中的地址。

    1,“==”

    判断两个变量是否是同一个变量

    基本数据类型:直接比较值

    引用数据类型:需要比较对应的引用的内存的首地址

    2,equals

    用来比较两个对象的内容是否相等

    这个是Object类型的方法,基本数据类型不可用

     由上面Object类中equals的实现可以看出,equals就是通过“==”来实现的,equals判断内容相等的功能是在引用类型定义的时候通过重写String方法实现的,比如说,下面是String类型对equals的重写。

    字符串比较特殊:

    public class Demo {
    
    public static void main(String[] args) {
        String str1=new String("123");
        String str2=new String("123");
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));
        
    }}

    String通过new串获取的时候是两个内容相同的对象(不是同一个对象)

    所以输出结果为:

    (2)

    public class Demo {
    
    public static void main(String[] args) {
        String str1="123";
        String str2="123";
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));
        
    }}

    这种方式声明的是两个相同的对象(准确的说就是一个对象)

    所以输出结果:

    所以在我们自定义的类中,如果需要对该类的对象进行内容的比较就需要重写他的equals方法。

    尤其是在Map,Set集合中,由于他们是无序的,所以要求他们的几何元素不可重复,他们在判断元素是否重复的时候就会自动去调用equals方法。

    3,HashCode

    hashCode()是从Object方法中继承过来的吗,他也用来鉴定两个对象是否相等。Object类中的hashCode()方法,返回对象在内存中地址转换成一个int值,所以如果不重写hashCode()任何对象的hashCode()的返回值都是不相等的。

      虽然equals()方法的作用与之相同,但是他与hashcode也是哪有区别的。

    一般来将,equals()是给用户调用的,如果需要判断两个对象是否相等,可以重写equals方法,然后再代码中调用,这样就可以判断两个对象的内容是否相等了。

    对于hashCode()用户一般不会去调用它,例如在hashMap()中。由于Key是不可以重复的,他在判断key是否重复时就使用了hashCode()方法,而且也是用到了equals()方法,

     

  • 相关阅读:
    一个故事讲透供应链的三大战略
    电商系统之订单正向与逆向流程设计
    广告深度预估技术在美团到店场景下的突破与畅想
    美团智能客服核心技术与实践
    供应链里的批次管理,你了解多少
    对于HTML语义化的理解
    前端三大框架中Vue与React区别
    对于mvc模式的理解与学习
    对于javascript里面闭包的理解
    webpack的理解与使用
  • 原文地址:https://www.cnblogs.com/excellencesy/p/9114701.html
Copyright © 2011-2022 走看看