摘要:例输出看包装类源码会发现比较时会先去判断类型是否相同。用包装类的方式比较时,由于包装类并不会自动去转换类型,所以类型不同时即使值相同也会返回。所以在用包装类比较数值时,不要用用方法时要注意类型相同或者直接用基础数据类型比较。
例1:
Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e= 321; Integer f= 321; Long g = 3L; System.out.println(c == d); //1 System.out.println(e == f); //2 System.out.println(c == (a+b)); //3 System.out.println(c.equals(a+b));//4 System.out.println(g == (a+b)); //5 System.out.println(g.equals(a+b)); //6
输出结果
true false true true true false
1.包装类比较,不会自动拆包,但是Integer中会有一个cache 存储-128到127的数,所以c与d的地址值相同。
2.地址值比较,没用到cache
3.当 "=="时,右侧发生自动拆包,所以其实是int值在比较
4.a+b 时拆包成int,传入Integer的equals方法进行自动装包。equals方法内是值比较。
5.会拆包成基础数据类型比较
6.包装类的equals 会判断类型,Long.equals(Object object)中判断类型不符合,返回false。
例2:
Long a = 1L; Integer b = 1; System.out.println(a.equals(1)); //7 System.out.println(a.equals(1L)); System.out.println(a.equals(b));
输出
false true false
看包装类源码会发现比较时会先去判断类型是否相同。
7.a.equals(1)时,int 1 装包成Integer,自然和Long不同类型。
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }
总结:
当使用自动拆包/装包时,包装类之间比较并不会自动拆包,是地址比较,其中还有缓存会影响结果。
用包装类的equals方式比较时,由于包装类并不会自动去转换类型,所以类型不同时,即使值相同,也会返回false。所以在用包装类比较数值时,不要用"==",用equals方法时要注意类型相同,或者直接用基础数据类型比较。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70610.html
摘要:前阵子,我们分享了中的基本数据类型转换这篇文章,对许多粉丝还是有带来帮助的,今天讲一下包装类的的由来,及自动装箱拆箱的概念和原理。下面是基本数据类型与对应的包装类型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前阵子,我们分享了《Java中的基本数据类型转换》这篇文章,对许多粉丝还是有带来帮助的,今天讲...
摘要:对象头的另外一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。并不是所有的虚拟机实现都必须在对象数据上保留类型指针,换句话说,查找对象的元数据信息并不一定要经过对象本身,这点将在节讨论。 目录介绍 1.关于int和Integer的问题区别分析 2.Integer的值缓存的原理 2.1 Java 5 中引入缓存特性 2.2 Intege...
摘要:当复制集合中的所有元素来创建新的集合时,要求集合中的所有元素必须是同一个枚举类的枚举值各实现类的性能分析的性能总比好,特别是最常用的添加查询元素等操作。因为需要额外的红黑树算法来维护集合元素的次序。在创建时进行,以防对集合的意外非同步访问 HashSet 大多时候使用Set集合时就是使用HashSet实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能 ...
阅读 2511·2021-07-26 23:38
阅读 3415·2019-08-30 13:10
阅读 2291·2019-08-29 18:33
阅读 2293·2019-08-29 16:12
阅读 962·2019-08-29 10:59
阅读 1784·2019-08-26 17:40
阅读 746·2019-08-26 11:59
阅读 794·2019-08-26 11:41