【面试】基本数据类型的包装类缓存

目录

          • 1. 说明
          • 2. Integer类分析
            • 2.1 代码块
            • 2.2 字节码
            • 2.3 分析
            • 2.4 valueOf方法

1. 说明
  • 1.在java中,基本数据类型的包装类(Integer、Byte、Character、Short、Long、Boolean)的某些值会被缓存。
  • 2.以提高性能并减少内存使用。
  • 3.这种缓存机制是自动的,并且对于开发者来说是透明的。
  • 4.对于Byte、Short、Integer、Long这些整数类型的包装类为-128到127之间的值提供了缓存。
  • 5.Character:字符类型的包装类Character为0到127之间的值提供了缓存
  • 6.对于Float和Double:这两个浮点类型的包装类并没有为任何值提供缓存。因为浮点数的精度问题使得缓存所有可能的值变得不实际。
  • 7.Boolean: Boolean类型的包装类为true和false两个值提供了缓存。因为Boolean只有两个可能的值,它的缓存机制非常直接和简单。使用Boolean.TRUE和Boolean.FALSE时,得到的是缓存中的对象实例。
  • 8.在进行对象比较时,通常推荐使用equals()方法而不是==操作符,因为equals方法提供了更健壮和一致的语义。当处理不同源(一个通过valueOf方法获得,一个通过new关键字创建)的对象,equals方法比==操作符更可靠。
2. Integer类分析
2.1 代码块
public void test(){Integer a = 10;Integer b = 10;
}
2.2 字节码
 0 bipush 102 invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>5 astore_16 bipush 108 invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
11 astore_2
12 return
2.3 分析
  • 1.bipush 10 bipush用于将一个字节(-128到127)的值推送到操作数栈上。即把10推送到操作数栈。
  • 2.invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;> invokestatic 调用一个静态方法。#5 指向常量池中某个条目的索引,这里指向java/lang/Integer.valueOf方法的符号引用。(I)Ljava/lang/Integer 方法的描述符,该方法接受一个int类型的参数(由(I)表示)并返回一个java.lang.Integer类型的对象(由 (I)Ljava/lang/Integer;> 表示)。执行此指令时,JVM会从操作数栈顶部弹出一个int值(在这个例子中是10),将其作为参数调用java.lang.Integer.valueOf方法,并将返回的Integer对象推送到操作数栈的顶部。
  • 3.astore_1 将操作数栈顶部的值(在这个例子中是Integer对象)存储到局部变量数组的第二个位置(索引为1,因为局部变量数组的索引从0开始)。
2.4 valueOf方法
  • 1.代码块
@HotSpotIntrinsicCandidate
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}
  • 2.当i大于等于-128且小于等于127,则返回缓存中的对象,否则创建一个新对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rxjava2最全面的解析

说到区别&#xff0c;可能有的小伙伴会问&#xff0c;我没看过rxjava1。可以直接看rxjava2么。个人觉得不必要&#xff0c;因为 rxjava2.x 是按照 Reactive-Streams specification 规范完全的重写的&#xff0c;完全独立于 rxjava1.x 而存在&#xff0c;它改变了以往 rxjava1的…

如何看待鸿蒙HarmonyOS?

鸿蒙系统&#xff0c;自2019年8月9日诞生就一直处于舆论风口浪尖上的系统&#xff0c;从最开始的“套壳”OpenHarmony安卓的说法&#xff0c;到去年的不再兼容安卓的NEXT版本的技术预览版发布&#xff0c;对于鸿蒙到底是什么&#xff0c;以及鸿蒙的应用开发的讨论从来没停止过。…

物联网系统运维——移动电商服务器单点部署,web服务器部署,Nginx Web服务介绍,Nginx性能,部署,架构,及实验:安装并设置Nginx(重点)

一.web服务器介绍 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上提供某种特定类型计算机的程序&#xff0c;Web服务器可以向浏览器等Web客户端提供文档&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览&#xff0c;可以放置数据文件&#xff0c;让全世界下…

力扣SQL50 游戏玩法分析 IV 子查询

Problem: 550. 游戏玩法分析 IV &#x1f468;‍&#x1f3eb; 参考题解 这个SQL查询的目的是计算每个玩家在登录后的第二天参与活动的比例。查询使用了子查询和左连接来实现这一目的。下面是查询的详细解释&#xff0c;包括每个部分的作用和注释&#xff1a; -- 计算每个玩…

Leetcode 3192. Minimum Operations to Make Binary Array Elements Equal to One II

Leetcode 3192. Minimum Operations to Make Binary Array Elements Equal to One II 1. 解题思路2. 代码实现 题目链接&#xff1a;3192. Minimum Operations to Make Binary Array Elements Equal to One II 1. 解题思路 这一题的话就是一个动态规划&#xff0c;我们使用两…

【K8S运维】整理常见使用命令

*特别提醒: 文件复制类的命令&#xff0c;执行命令等需要谨慎确定命令执行后的效果&#xff0c;否则一旦出错就不可逆&#xff01;&#xff01;&#xff01; 命令概览 序号使用场景命令格式使用样例命令使用说明1查询集群节点有多少kubectl get nodes2查询集群运行哪些podkub…

文华财经多空精准买卖点止损止盈数值主图指标公式源码

文华财经多空精准买卖点止损止盈数值主图指标公式源码&#xff1a; DD:EVERY(H>HV(H,20),1); KK:EVERY(L<LV(L,20),1); D:DD&&SUM(DD,BARSLAST(KK))1; K:KK&&SUM(KK,BARSLAST(DD))1; Y:1; DRAWCOLORKLINE(Y&&ISDOWN,COLORYELLOW,0); DRAW…

【原创】springboot+mysql海鲜商城设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Vue的Router?一个小demo秒了

效果展示 正文 登录页 <template><div><div class"login"><h3>图书管理系统</h3><div class"user"><span>账号&#xff1a;</span><input type"text" v-model"user" /></…

193.回溯算法:组合总和(力扣)

代码解决 class Solution { public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtrcing(vector<int>& nums, int target, int flag, int index) {// 如果当前组合的和超过了…

C++:字符串string类使用

C字符串和C字符串的对比 (1)C语言严格说没有字符串的概念&#xff0c;C字符串其实就是字符数组或字符指针 (2)C和之后的java等都有字符串&#xff0c;本质是一个class (3)C字符串的优势是标准库自带可用于字符串的各种处理算法和方法 (4)C实际开发中建议使用C字符串而不是沿用…

高可用电商支付架构设计方案

高可用电商支付架构设计 在现代电商业务中&#xff0c;支付过程是其中至关重要的一环&#xff0c;一个高可用、安全稳定的支付架构不仅可以提高整个系统的可靠性和扩展性&#xff0c;降低维护成本&#xff0c;还可以优化用户体验&#xff0c;增加用户黏性。 本文将提出一种高…

121.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与发送界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

Vue 路由跳转时携带参数怎么写?(持续完善中...)

Vue前端中由A页面跳转至B页面&#xff0c;需要携带参数&#xff0c;应该怎么样实现呢&#xff1f; 一、参数为id A页面&#xff1a; // 点击跳转链接&#xff0c;并携带id至B页面 const toViewNewsDetail (value) > {const path /newsPublish/newsDetail;router.push({…

Kubernetes之Service详解

本文尝试从Service暴露服务方式、Service控制器实现原理、使用规范等方面对Kubernetes 中的Service进行详细介绍。 一、Kubernetes 中的pod有哪些暴露服务的方式 各种 Kubernetes 中暴露服务的方式都有其独特的优缺点&#xff0c;根据具体的使用场景和需求&#xff0c;选择合…

在Windows10中使用Vim

服务器没有图形界面&#xff0c;但是numpy包又需要调用图形界面接口&#xff0c;这样就导致了错误&#xff0c;搞得我只好先回windows开发。看来当年 Ubuntu桌面版也不算是多此一举啊。 这么多ide我还是喜欢vim&#xff0c;因为它真的太简单了。咱们这个老年机启动的也非常快&…

【jenkins1】gitlab与jenkins集成

文章目录 1.Jenkins-docker配置&#xff1a;运行在8080端口上&#xff0c;机器只要安装docker就能装载image并运行容器2.Jenkins与GitLab配置&#xff1a;docker ps查看正在运行&#xff0c;浏览器访问http://10....:8080/2.1 GitLab与Jenkins的Access Token配置&#xff1a;不…

力扣爆刷第153天之TOP100五连刷31-35(合并区间、编辑距离、复原IP)

力扣爆刷第153天之TOP100五连刷31-35&#xff08;合并区间、编辑距离、复原IP&#xff09; 文章目录 力扣爆刷第153天之TOP100五连刷31-35&#xff08;合并区间、编辑距离、复原IP&#xff09;一、56. 合并区间二、124. 二叉树中的最大路径和三、72. 编辑距离四、19. 删除链表的…

Kubernetes排错(七)-Pod 状态一直 ContainerCreating

查看 Pod 事件 $ kubectl describe pod apigateway-6dc48bf8b6-l8xrw -n cn-staging 异常原因 1&#xff09;no space left on device ... Events:Type Reason Age From Message---- ------ …

Google项目管理总览(一)

目录 一、项目管理基础 1.1、项目 1.2、项目管理 1.2.1、重要性&#xff08;why&#xff09; 1.2.2、项目生命周期 1.2.3、方法论&#xff08;项目管理&#xff09; 1.3、项目经理 1.3.1、构建人际关系的技巧 1.3.2、注意 1.4、组织架构 1.5、组织文化 二、Project …