Integer这个包装类是个妖孽

简介:  给大家出一道小儿科的题:public class TestInteger { public static void main(String[] args) { Integer a = 1;...

 

给大家出一道小儿科的题:
public class TestInteger {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        long h = 2L;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a+b));
        System.out.println(c.equals(a+b));
        System.out.println(g == (a + b));
        System.out.println(g.equals(a + b));
        System.out.println(g.equals(a + h));
    }
}
答案是多少呐,你一定在嘀咕这还不简单呐,答案是

true

true

true

true

true

false

如果你这样想,我只能说你还太嫩,首先不公布答案呐,最后在公布,先分析分析

1.我们知道在编码的时候能不用integer就不用这种包装类,因为它有个装箱和拆箱的过程,会浪费时间,

2.Integer的缓存范围大家想必都知道就是-128(-2的7次方)到127(2的7次方-1)超出这个范围就会在堆中重新分配内存,所以比较的值超出这个范围地址就会不一样

------------------------------------------------------------------------------------

再来说一下==这种运算法的比较,它的比较会先比较地址值,

如果比较的一边有操作表达式,会比较数值

------------------------------------------------------------------------------------

再来说一下equals

它在比较的时候会优先比较数值

但是Long类型的equals会首先判断是否属于Long,

------------------------------------------------------------------

好了公布正确答案

true
true
true
true
true
false
true

最后一个的解释是,a+h,a是Integer,h是Long,在进行运算时,会自动转化为Long类型的进行运算,所以是true

而倒数第二个a+b都是intrger类型的,所以不会进行转化,所以还是Integer类型的与Long类型没法比较。

 

 

目录
打赏
0
0
0
0
2
分享
相关文章
【ESSD技术解读-03】阿里云块存储企业级特性之异步复制
在大数据时代,数据就是企业的核心资产,是企业的生命线。在现实世界中,灾难时有发生,当发生灾难时,容灾能力成为企业能否生存的关键。云上容灾服务,通常称为 DRaaS(灾难恢复即服务)不但能够省去自建容灾中心的开销,还能节省后续运维成本,帮助客户快速建立起跨地域的容灾方案,即买即用,随时释放的特性也为用户提供了极大的弹性。本文介绍了云上容灾产品形态,企业可结合自身特点选择合适的容灾方案,针对异步复制产品解析了传统容灾与云上容灾的技术架构。阿里云块存储也结合自身架构特点实现了块存储的异步复制产品。
1064 0
深入理解Java自动装箱和自动拆箱(反编译字节码理解每条指令)
在Java中,自动装箱(Autoboxing)是指将基本数据类型(如int、char等)自动转换为其对应的包装类(如Integer、Character等)的过程。而自动拆箱(Unboxing)则是将包装类的对象转换回其对应的基本数据类型的操作。这些特性从Java SE 5开始被引入,以方便开发者在处理基本类型和其包装类之间进行转换。 下面是一个简短的摘要: - **自动装箱**:当基本类型赋值给包装类时,例如 `Integer i = 1;`,Java会自动调用Integer的`valueOf()`方法,将int转换为Integer对象。对于数值在-128到127之间的int,会使用Int
287 2
深入理解Java自动装箱和自动拆箱(反编译字节码理解每条指令)
构建树工具类
在系统设计中,有许多地方都需要用到树型结构,所以建立一个构建树的工具类,封装关于树操作的一些通用方法,方便使用。
224 1
QT+VS 工程在 Release/Debug 文件夹下导入相关 DLL (非常实用)
QT+VS 工程在 Release/Debug 文件夹下导入相关 DLL (非常实用)
使用 Docker Compose 部署 Redis Sentinel 高可用架构
在现代应用中,无法容忍系统中断或数据丢失。Redis 作为一种高性能的内存数据库,被广泛应用于缓存、会话管理等场景。然而,即使我们拥有可伸缩的 Redis Cluster 集群,也需要考虑在主节点故障时自动切换到从节点的机制。这时候 Redis Sentinel 就派上用场了。高可用性是分布式应用的核心需求之一。我们在之前的文章中介绍了redis cluster 3主3从集群的搭建,本文将为您介绍如何在现有的 Redis 3 主 3 从 Cluster 集群基础上,使用 Docker Compose 部署 Redis Sentinel,为您的应用构建一个强大的高可用性方案。
577 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问