接上篇,分析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));

equals和==方法比较(二)--Long中equals源码分析的更多相关文章

  1. 【原】Spark中Client源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...

  2. 【原】Spark中Master源码分析(二)

    继续上一篇的内容.上一篇的内容为: Spark中Master源码分析(一) http://www.cnblogs.com/yourarebest/p/5312965.html 4.receive方法, ...

  3. 【原】 Spark中Worker源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Worker源码分析(一)http://www.cnblogs.com/yourarebest/p/5300202.html 4.receive方法, r ...

  4. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  5. php中foreach源码分析(编译原理)

    php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...

  6. 手把手教你实现栈以及C#中Stack源码分析

    定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...

  7. equals和==方法比较(三)--Long中LongCache源码分析

    下面我们来分析,上篇博客中遗留的问题,为什么下方的两个一个是true,两一个是false那? //true Long l1=123l; Long l2=123l; System.out.println ...

  8. Java中ArrayList源码分析

    一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...

  9. Java中HashMap源码分析

    一.HashMap概述 HashMap基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.(除了不同步和允许使用null之外,HashMap类与Hashtab ...

  10. Nimbus<二>storm启动nimbus源码分析-nimbus.clj

    nimbus是storm集群的"控制器",是storm集群的重要组成部分.我们可以通用执行bin/storm nimbus >/dev/null 2>&1 &a ...

随机推荐

  1. Hadoop学习之路(二十六)MapReduce的API使用(三)

    影评案例 数据及需求 数据格式 movies.dat 3884条数据 1::Toy Story (1995)::Animation|Children's|Comedy 2::Jumanji (1995 ...

  2. programming-languages学习笔记--第3部分

    programming-languages学习笔记–第3部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...

  3. [Python 多线程] Concurrent (十五)

    concurrent包只有一个模块: concurrent.futures - 启动并行任务 异步并行任务编程模块,提供一个高级的异步可执行的便利接口. futures模块提供了2个池执行器 Thre ...

  4. QTP基本方法

    1.for循环: m代表间隔循环长度: 如果m>0,则j要大于i: 如果m<0,则i要大于j: for i to j [step m] 语句块 [exit for]//强制退出循环 nex ...

  5. 阅读基于sketch的软件定义网络测量数据平面硬件模型

    概要 硬件实现 基于sketch 功能:采集包数.流长数据,恢复五元组 重点:高速条件下性能较好,节省硬件资源 摘要: 提出一种基于sketch 数据结构的软件定义测量数据平面硬件模型,并在以现场可编 ...

  6. Spring异步-@Async注解

    Spring异步:@Async注解 使用@Async前需要开启异步支持:@EnableAsync 注解和XML方式 @Async返回值的调用:需要使用Future包装 1.如果没有使用Future包装 ...

  7. linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录

    可以先总结下:大都是先用 which 获取目录:然后再获取配置项位置: which  mysql /usr/bin/mysql /usr/bin/mysql --help | grep -A1 'De ...

  8. Set集合之TreeSet类

    TreeSet简介 TreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保集合元素处于排序状态.与HashSet集合相比,TreeSet还提供了如下 ...

  9. java String详解

    创建字符串: 1. String(char a[]) char a[] = {'g','o','o','d'}; String str = new String(a); 2. String(char ...

  10. 【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

    编译 Luajit 库,的确是一个挑战.因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了.以前只是编译了适用于真机的 Luajit 库.最近在尝试编译模拟器 Luajit 库 ...