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));
equals和==方法比较(二)--Long中equals源码分析的更多相关文章
- 【原】Spark中Client源码分析(二)
继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...
- 【原】Spark中Master源码分析(二)
继续上一篇的内容.上一篇的内容为: Spark中Master源码分析(一) http://www.cnblogs.com/yourarebest/p/5312965.html 4.receive方法, ...
- 【原】 Spark中Worker源码分析(二)
继续前一篇的内容.前一篇内容为: Spark中Worker源码分析(一)http://www.cnblogs.com/yourarebest/p/5300202.html 4.receive方法, r ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- 手把手教你实现栈以及C#中Stack源码分析
定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...
- equals和==方法比较(三)--Long中LongCache源码分析
下面我们来分析,上篇博客中遗留的问题,为什么下方的两个一个是true,两一个是false那? //true Long l1=123l; Long l2=123l; System.out.println ...
- Java中ArrayList源码分析
一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...
- Java中HashMap源码分析
一.HashMap概述 HashMap基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.(除了不同步和允许使用null之外,HashMap类与Hashtab ...
- Nimbus<二>storm启动nimbus源码分析-nimbus.clj
nimbus是storm集群的"控制器",是storm集群的重要组成部分.我们可以通用执行bin/storm nimbus >/dev/null 2>&1 &a ...
随机推荐
- 解决 mongodb $in needs an array 问题
问题现象: 在mongodb执行批量查询操作时,抛出异常 Exception 2: $in needs an array. 问题解决: 感谢伟大的 google 和 stackoverflow 有人遇 ...
- 更有效率的使用Visual Studio
工欲善其事,必先利其器.虽然说Vim和Emacs是神器,但是对于使用Visual Studio的程序员来说,我们也可以通过一些快捷键和潜在的一些功能实现脱离鼠标写代码,提高工作效率,像使用Vim一样使 ...
- PAT——1052. 卖个萌
萌萌哒表情符号通常由“手”.“眼”.“口”三个主要部分组成.简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手] 现给出可选用的符号集合,请你按用户的要求输出 ...
- PAT——1033. 旧键盘打字
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以及应该输入的文 ...
- 模块XXXX可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86(32位)x64(64位)版本兼容。
最近自己在编写ActiveX控件.遇到的麻烦事不少. 今天遇到了这个问题“模块XXXX可能与您正在运行的Windows版本不兼容.检查该模块是否与regsvr32.exe的x86(32位)x64(64 ...
- SDN测量论文粗读(一)9.19
UMON: Flexible and Fine Grained Traffic Monitoring in Open vSwitch 论文来源:CoNext 发表时间:2015 解决问题及所做贡献:现 ...
- Spring coud微服务框架具体实现关键说明
搭建一个微服务,考虑的问题涉及到运维,数据管理,性能,并发等方方面面.项目中使用Spring coud 搭建微服务,从技术选型,到技术实现都要全方面考虑服务化的问题.下面简单总结下搭建过程用的技术说明 ...
- Kubernetes(一)--简介
一.什么是kubernetes(K8s)? Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到 ...
- 安装 jdk
1.打开url选择jdk1.8下载http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- 【转】C#计算两坐标点距离
//地球半径,单位米 ; /// <summary> /// 计算两点位置的距离,返回两点的距离,单位 米 /// 该公式为GOOGLE提供,误差小于0.2米 /// </summa ...