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的更多相关文章

  1. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  2. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

  3. Java进阶之路

    Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...

  4. (转)Java进阶java int与Integer的区别

    Java进阶java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象,用一个引 ...

  5. 大型Java进阶专题(一) 前言

    前言 ​ 各位读者好,本系列为Java进阶专题,为那些有一定工作经验,做了多年业务的码农,希望突破技术瓶颈,但没有形成系统的Java只是体系,缺乏清晰的提升方法和学习路径的人,比如作者本人.该课题的是 ...

  6. 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?

    转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...

  7. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  8. Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...

  9. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

  10. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

随机推荐

  1. PHP 安装启用openssl(解决 wordpress可选的模组openssl未被安装或已被禁用)

    本教程仅适用Windows Servier IIS网站服务器. 我的博客使用IIS搭建,相比Linux,相关的教程格外少.因此让以后的小伙伴也能马上解决问题,分享此方法. 首先需要下载php对应版本的 ...

  2. Java技术栈总结-基础

    - - -计算机技术演化- - -1 编程语言演化1.1 写在最前  此文用于个人总结,串接知识点 1.2 汇编  举例:mov .add  特点:程序量很大,几百行.几千行乃至几万行 1.3 VB- ...

  3. biancheng-Thymeleaf教程

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎.它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web ...

  4. w3cschool-Struts2 概述

    Struts2 概述 Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构.最初,是以WebWork框架和 ...

  5. typedef的最新理解

    1.typedef的常规用法 typedef unsigned int  UNIT; UINT b; 需要注意的地方有下面几点: ①define 前面替代后面, typedef后面替代前面,这个不要记 ...

  6. CRT优化RSA

    转载:利用中国剩余定理加速 RSA RSA 作为世界上使用最为流行的公钥密码算法,被广泛应用在数据加密和数字签名上. 为了提高加密和签名验证的效率,一般会将RSA的加密指数(一般是公钥位数)设置的较小 ...

  7. 输入输出-python

    输入输出-python 输入输出 输入 Python提供了input()函数用于从控制台输入数据. name = input("请输入您的姓名:") print("您输入 ...

  8. FunPapers[1]: GBDT和DNN强强联手,表格预测新突破!

    Team up GBDTs and DNNs: Advancing Efficient and Effective Tabular Prediction with Tree-hybrid MLPs h ...

  9. 魔乐社区体验:探索Llama 3.1模型微调之旅

    在2024年的AI领域,Meta发布的Llama 3.1模型无疑成为了研究者和开发者的新宠.我有幸通过魔乐社区提供的资源,对这一模型进行了深入的学习和实践.在这个过程中,魔乐社区的资源和支持给我留下了 ...

  10. macOS的PrivilegedHelperTools文件夹

    在 macOS 上,/Library/PrivilegedHelperTools 文件夹是一个特殊的位置,用于存放可以以更高权限运行的辅助工具或守护进程.这些工具通常由各种应用程序安装,以执行需要超出 ...