看到几道关于Integer拆装箱的小题目,正好有点时间翻看了一下Integer类的源码,加上自己的一点思考,决定写点东西。

先来看看下面的代码:

如果这道题你能得出正确答案并了解其中的原理,说明你的基础还可以。如果你的答案是true和true的话,建议你去看看书。

程序运行结果:

我们知道==比较的是两个对象的引用,这里a、b、c、d都是新建出来的对象,按道理都应该输出false才对, 想知道其中的原理,我们去看看Integer.java这个类的源码就知道了。

当我们声明Integer c = 10;的时候,此时编译器会进行自动装箱操作,简单的说,也就是把基本数据类型转换成Integer对象,而把int型转换成Integer对象正是调用的valueOf(int i)方法。从上面的源码中可以看出,Integer中把-128--127这256个数据缓存了下来。官方的说法是这些小的数字使用的频率比较高,为了优化性能,就把这之间的数缓存了下来。这就是为什么输出结果是false和true了。当声明的Inetger对象的值在-128--127之间时,引用的是缓存中的同一个对象(已经创建好保存在缓存中),所以结果是true;当声明的Integer对象的值不在这个范围之类的时候,就会通过new Integer(i);语句创建一个Integer对象。

我们再来看下面这段代码:

如果这道题你能很快给出正确答案,那么==比较符你就掌握的比较透彻了。公布答案:

看到这个答案,小伙伴们可能又会不解,上面不是说Integer把-128--127缓存起来了吗,这个不应该是true吗?但是你仔细看,这里的Integer对象是我们自己new出来的,并不是用缓存,所以结果是false。那第一个为啥又是true呢?首先这里b的值为1000,肯定跟我们所知的Integer缓存没关系,既然和缓存没有关系,a是我们new出来的对象,那应该输出false才对呀?注意这里b是int型,当int和Integer进行==比较的时候,Java编译器会把Integer进行自动拆箱,也就是把Integer转为int型,所以这里进行比较的是int型的值,因此结果为true。

java integer源码_Integer包装类源码分析相关推荐

  1. java integer比较大小_Integer 类型对象之间大小比较

    一.Integer 类型对象之间大小比较 1. 使用 new Integer() 创建的对象 : 首先,我们知道,在java中,基本类型之间是可以做大小比较的,例如int i=1,int j=2,是可 ...

  2. java的数组与Arrays类源码详解

    java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...

  3. Java项目:SSM汽车维修管理系统源码

    作者主页:夜未央5788 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 项目介绍 源码描述: 一.源码介绍 汽车维修管理系统源码使用ssm框架,maven,bootsr ...

  4. Java集合(超详细-含源码)

    一 集合体系结构 集合的体系结构分为单列集合和双列集合 二 Collection单列集合 Collection是单列集合的祖宗接口,他的功能是全部单列集合都可以继承使用的. 单列集合接口下又分为Lis ...

  5. 基于java web servlet生鲜商城管理系统源码含报告文档

    (一)目的 电子商务的迅速兴起,网上购物也为人们的生活提供了极大的便利,不受时间和空间的限制.商城系统的兴起,扩大了消费市场的空间,对于大型企业来说,建设商城系统是正确的选择,不仅要扩大销售渠道,而且 ...

  6. 基于java SpringBoot的医院门诊管理系统源码和论文

    医院门诊信息管理系统是一个基于Internet的应用系统,它是一个面对当前的医院门诊管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的一个信息自动化的系统,整个系统从符 ...

  7. java springboot 体育场馆预约小程序源码

            博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 java springboot 体育场馆预约小程序源码 演示视频 ...

  8. java web学习项目20套源码完整版

    java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...

  9. java B2B2C springmvc mybatis电子商务平台源码-Consul服务发现原理...

    Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License ...

  10. java b2b2c shop 多用户商城系统源码- eureka集群整合hystrix框架

    继之前项目继续整合hystrix框架,hystrix框架为Netflix的模块,是一个容错框架.当用户访问服务调用者的时候,如果服务提供者出现异常导致无法正常返回出现请求超时的情况,而服务调用者并不知 ...

最新文章

  1. LDAPserver的安装
  2. 为什么要选择Apache Pulsar:IO隔离
  3. 音频录入后以不同采样率输出
  4. Netflix 工程师的生活 —— 40毫秒的案例
  5. 系统架构师学习笔记-分布式系统
  6. Spring Batch的事务-Part 1:基础
  7. 宏定义的黑魔法 - 宏菜鸟起飞手册
  8. 中国各省的简称及简称的由来
  9. XJOI一级一段题解(g++,即C++),也可视作C++算法竞赛教程
  10. 室内地图制作软件,怎么制作电子地图?
  11. 用C语言实现:输入某年某月某日,判断这一天是这一年的第几天
  12. 联通不断发短信-尊敬的用户请回复以下编码办理业务:599
  13. 树莓派与windows之间传输文件
  14. 克隆一个自己的 AI 来上网课,
  15. srs直播 java开发,使用 SRS/OBS/VLC 快速搭建直播服务系统
  16. 什么样的笔记本适合编程?
  17. Win7 ODBC 数据源ACCESS2003的链接
  18. 数据库部分函数依赖、传递函数依赖的区别以及范式判断
  19. WD移动硬盘bitlocker没反应解决方法(双击不弹出密码输入框)
  20. hbuilderx创建项目

热门文章

  1. 使用5502自带的UART口发送数据乱码的问题
  2. PHP下简单交换两个变量
  3. 关于boostrap的modal隐藏问题(前端框架)
  4. 入门python之前,应该先了解这些
  5. 项目中关于IFRAME引发的问题【出现率很高】
  6. nginx allow 多个ip ipv4的网段表示方法解析
  7. 初识 Node.js
  8. speex的基本编码和解码流程
  9. Web.py session用户认证
  10. css3 flex流动自适应响应式布局样式类