zoukankan      html  css  js  c++  java
  • equals和==方法比较(二)--Long中equals源码分析

    接上篇,分析equals方法在Long包装类中的重写,其他类及我们自定义的类,同样可以根据需要重新equals方法。

    equals方法定义

    equals方法是Object类中的方法,java中所有的对象均继承自Object类,也就继承了equals方法,下面是Object类中equals方法的实现,

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

    可以看到,equals方法使用的就是==的比较方式,那么如果是两个引用类型,比较的当然是两个引用地址。

    java又规定所有继承自Object的类都可以重写equals方法,即实现自己的比较逻辑,但Long这个包装类(其他的包装类也是如此)没有重写了equals方法,而是进行了重载,如下

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

     首先,判断传入的obj的类型,是否为Long,否则直接返回false;

    然后,对obj进行了强转,调用longValue方法,下面看longVale()方法定义,

    public long longValue() {
            return value;
        }

    此方法返回的是value,那么value是什么那,value是Long包装类型中的值,即

    /**
         * The value of the {@code Long}.
         *
         * @serial
         */
        private final long value;

    也就是Long的值

    最后,使用==比较符进行比较,也就是两个包装类型Long中的value进行==比较,那么比较的就是字面量了。

    以上就是Long中equals方法的分析,也就是说无论何时使用下面的代码,都是返回的true,因为使用的equals,比较的是两个value的值。

    Long l1=123456l;
    Long l2=123456l;
    System.out.println("l1==l2"+l1.equals(l2));
  • 相关阅读:
    YARN的设计
    在(MRv1)中JobTracker工作方式
    经典 MapReduce框架(MRv1)
    进程与线程的简单解释
    Java序列化的机制和原理
    ibatis源码学习4_参数和结果的映射原理
    ibatis源码学习3_源码包结构
    ibatis源码学习2_初始化和配置文件解析
    ibatis源码学习1_整体设计和核心流程
    spring中的设计模式
  • 原文地址:https://www.cnblogs.com/teach/p/10246455.html
Copyright © 2011-2022 走看看