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中,这个方法已经被重写为对比内容是否一致。

  • 相关阅读:
    为什么下水井盖是圆的
    静心尽力
    菜鸟的一年
    [转]Libev教程
    流媒体:V4L2视频获取
    [转]Libev源码分析 -- 整体设计
    c#操作xml增删改查
    dwz简单配置与操作
    jsonp 跨域访问
    操作cookie.判断浏览器系统版本,判断safir浏览器存储数据
  • 原文地址:https://www.cnblogs.com/wxdmw/p/11011729.html
Copyright © 2011-2022 走看看