这道题有的人或许做过,也可能选对,但是这其中的道理你却不一定理解,在这里大牛走过,小白留下一起学习。 先来分析选型A,Integer i01 = 59,是一个装箱的过程,在进行i01 == i02的比较过程中,因为右边是整型,发生了拆箱的动作,所以进行了值得比较,所以返回true。 在这里拿出Integer a = 59,Integer b = 59,这种又会出现什么状况呢,如果按照装箱和拆箱来看就是true,如果按照对象来看,就是false,在你举棋不定得时候你就应该看看源码了。 /** * Cache to support the object identity semant 在Java编程语言中,`Integer.valueOf()`方法是一个关键的知识点,尤其对于理解自动装箱(autoboxing)和拆箱(unboxing)机制至关重要。在Java中,基本类型`int`与封装类`Integer`之间可以自动转换,这就是所谓的装箱和拆箱。装箱是将基本类型的值转换为对应的封装类对象,而拆箱则是将封装类对象转换为基本类型的值。 题目中提到的"血案"实际上是一个关于`Integer`对象相等性比较的陷阱。在Java中,`Integer i01 = 59`这样的语句会触发装箱操作,将`int`值59转换为`Integer`对象。当进行`i01 == i02`的比较时,如果`i02`是一个`int`类型,那么在比较前会先将其拆箱为`Integer`,然后比较的是两个对象的值,因此返回`true`。 然而,当涉及到`Integer a = 59`和`Integer b = 59`这样的情况时,结果可能会出乎意料。`Integer`类内部有一个缓存机制,用于存储-128到127之间的`Integer`对象。这是为了优化性能,避免重复创建相同的对象。所以在这些范围内,`Integer a = 59`和`Integer b = 59`会从缓存中获取相同的对象引用,因此`a == b`会返回`true`。 但是,如果值超出了这个范围,例如`Integer c = 300`和`Integer d = 300`,由于不在缓存范围内,每次都会创建新的`Integer`对象,所以`c == d`会返回`false`,即使它们的值相同,但它们是不同的对象实例。 `IntegerCache`类是`Integer`类的一个静态内部类,它的作用就是实现上述的缓存功能。这个类在类加载时初始化,创建-128到127之间的`Integer`对象,并将它们存储在一个数组`cache`中。当调用`valueOf(int i)`方法时,会首先检查给定的`int`值是否在缓存范围内,如果在则直接返回缓存中的对象,否则创建新的`Integer`对象。 理解`Integer.valueOf()`的工作原理和`Integer`对象的缓存机制,是掌握Java中高级特性和优化性能的关键。在编写代码时,尤其是涉及到大量对象创建和比较时,了解这些细节可以帮助写出更高效、更符合预期的代码。对于初学者来说,深入研究源码和理解自动装箱拆箱的底层机制是提升技能的重要步骤。
































- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 学霸专用之国外学习网站,一般人我不告诉他.docx
- 谭浩强版《C++程序设计》知识点.doc
- 计算机基础讲稿.docx
- 智慧城市方案架构.doc
- 微机原理与接口技术卷.doc
- 人教-选修3-基因工程-DNA重组技术的基本工具2.ppt
- 软件项目的成本管理PPT课件.ppt
- 软件工程技术支持工程师上海.doc
- 新闻调查-“.mob”域名凸现移动互联网意义.docx
- 新疆交通职业技术学院无线网络建设方案的可行性分析.doc
- 基于Web的网上购物系统设计(含源文件).doc
- 生物医学数据库检索方法与技巧讲义.pptx
- java web作业管理系统
- 2023年电子商务技术理论试题库.doc
- 项目管理与时间进度表.doc
- 智能交通项目管理手册样本.doc


