zoukankan      html  css  js  c++  java
  • 关于==和equals的探索

    在我的概念之中,==在对比两个基本数据类型的时候,对比的是两者的值是否相同。而在对比两个引用数据类型的时候,比较的是两者的内存地址是否相同。

    而equals方法,我一直认为这个方法是对比两个引用数据类型的值是否相同的。

    但是,今天看到有人说,equals想要比较两个引用数据类型的内容是否一致,需要重写。因为Object的equals方法是比较地址是否一致的。

    然后我就疑惑了,以前好像也没重写就可以比较呀,是我记错了么?

    于是,我决定详细探究一下equals方法。

    Integer s=new Integer(2);
    Integer s1=new Integer(2);
    System.out.println(s==s1);
    System.out.println(s.equals(s1));

    可以看到,s和s1是两个对象,内存地址不同,而内容是相同的。

    返回结果为:

    false

    true

    那么问题来了,我没有对equals方法进行重写,那么返回值不应该是两个false么?

    于是,我看了一下Integer的equals底层代码

    public boolean equals(Object obj) {
            if (obj instanceof Integer) {
                return value == ((Integer)obj).intValue();
            }
            return false;
        }

    又查看了一下Object的底层代码

    public boolean equals(Object obj) {
            return (this == obj);
        }

    可以看到在Object中,equals的确是用于对比内存地址是否一致的,而在Integer中,这个方法已经被重写为对比内容是否一致。

  • 相关阅读:
    Tomcat项目部署
    java 项目时间和服务器时间不一致
    初始bat命令
    前端入门学习路线
    后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.
    mysql
    java运行时数据区
    java 静态初始化块,初始化块,构造器执行顺序
    java byte和char
    springboot加载外部的配置文件
  • 原文地址:https://www.cnblogs.com/wxdmw/p/11011729.html
Copyright © 2011-2022 走看看