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));
  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/teach/p/10246455.html
Copyright © 2011-2022 走看看