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

  • 相关阅读:
    行转列(FOR XML PATH)
    非聚集索引的注意事项
    避免JS全局变量冲突
    如何做个好员工?
    SQL Server 执行计划中的扫描方式举例说明
    SqlServer with递归查询的使用
    Excel插件类库的设计思路
    使用log4javascript记录日志
    布局
    Image控件的简单使用示例1
  • 原文地址:https://www.cnblogs.com/wxdmw/p/11011729.html
Copyright © 2011-2022 走看看