包装类面试题--java进阶day05
1.面试题
如下两个输出,请问分别是true还是false呢?

答案:

当范围在-128~127时,对象相同就会返回true

在讲解这个问题之前,先了解自动装箱的原理
2.自动装箱的原理
自动装箱,就是系统自动帮我们调用了valueof这个方法,虽然我们只是单纯的赋值,但在系统中依旧会调用该方法

因此,我们要了解valueOf里面究竟干了什么 如图

先不管走了什么逻辑,我们先搞清楚第一个if里面的范围是多大
ctrl 右键点击low,进入low内部
发现low是-128

然后再点击high
虽然没有直接赋值,但是往后看发现h是127,刚好给high赋值

所以第一个if的范围就是-128~127
valueOf内部分析
如果传入的数是在-128~127之间,就会走一个逻辑,否则就会new一个新的地址
i3和i4都是129,超出了范围,所以i3和i4都会各自new一个空间,对应的地址当然不同,所以返回的结果是false

当数据结果在-128~127之间

我们先把后面一大串东西拿掉,仔细观察前面的代码
会发现cache[]形态酷似数组

而后面那一大串就是它的索引,我们点击其内部进行观察,发现cache就是数组

所以,当范围在-128~127时,就不会创建新的对象,而是通过cache数组取出数组里的一个数
当i是127时,满足范围,索引为127-(-128)=255
i1和i2都是127,所以取出的都是同一份数据,所以==相比肯定是true

在cache中存在一个大小为256的数组,127+128=255,还有一个0

该设计就是用来节省内存消耗,-128~127这些数用的多,所以索性写了一个数组,方便拿取,节省内存
如果只想比内容,就可以用今天学的equals方法
很明显,Long这个包装类重写过equals方法

.

包装类面试题--java进阶day05的更多相关文章
- Java进阶(三十五)java int与integer的区别
Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- Java进阶之路
Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...
- (转)Java进阶java int与Integer的区别
Java进阶java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象,用一个引 ...
- 大型Java进阶专题(一) 前言
前言 各位读者好,本系列为Java进阶专题,为那些有一定工作经验,做了多年业务的码农,希望突破技术瓶颈,但没有形成系统的Java只是体系,缺乏清晰的提升方法和学习路径的人,比如作者本人.该课题的是 ...
- 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?
转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
随机推荐
- Dynamic CRM插件中获取Entity属性值问题
插件中获取Entity不同类型字段时稍有区别,一般用如下两种方式: Entity targetEntity = (Entity)context.InputParameters["Target ...
- 【解决问题记录】https网站中请求http资源接口报错与netERRSSLPROTOCOLERROR错误的解决
在线上的CRM网站中,对接OBS做了一个专门的公共服务,公共服务使用的http协议,在页面中调用接口时出现错误:The page at 'xxx' was loaded over HTTPS, but ...
- salesforce零基础学习(一百四十二)在Formula字段中如何通过Datetime字段显示Local Time(适配DST)
背景: 我们需求是显示Date Time类型的Time信息,比如我们想要在report中基于Hour Of Created Date进行分组,从而想要了解到一段时间内什么时间是数据创建的高峰期,不同的 ...
- Solution Set - “潮汐守候终结放逐月圆”
目录 0.「NOI Simu.」游戏 1.「NOI Simu.」海盗 2.「集训队作业 2020-2021」「LOJ #3405」Gem Island 2 3.「UR #12」「UOJ #181」密码 ...
- BigTable-列族存储
BigTable 其实就是 Google 设计的分布式结构化数据表. Bigtable 的设计动机: 需要存储的数据种类繁多,包括URL.网页内容.用户的个性化设置在内的数据都是Google需要经常处 ...
- Mysql死锁问题如何排查和解决
Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的. 1.查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2.查看正在锁的事务SE ...
- 深入解析 Spring AI 系列:分析 Spring AI 可观测性
今天我们将讨论之前略过的可观测性部分的代码.在这里,我想简单说明一下,当时这部分代码属于必须编写的固定模板,因此在最初的讨论中我们直接跳过了它.虽然这部分代码乍看之下可能显得比较复杂,但实际上它的核心 ...
- Win10 20H2 家庭版 环境变量
20H2 家庭版设置环境变量,此电脑--->属性,弹出的是新版本的设置界面,选择左侧的"关于",在最右侧的"相关设置"里面,选择"高级系统设置& ...
- Nmap 语法及示例
Nmap 语法及示例 基本语法 Nmap的基本语法结构如下: nmap [scan types] [options] [target] [scan types]: 标识扫描类型,如:TCP.UDP等. ...
- MySQL安装-centos7
mysql centos7上安装有3中方法 1yum安装 2rpm安装 3编译安装 方法一 rpm安装 1.查找以前是否安装有mysql,使用下面命令:rpm –qa | grep -i mysql ...