【自动装箱以及包装类的缓存】⭐️通过具体案例看下每种包装类的不同结果

目录

前言

一、自动装箱与拆箱(以 Integer 包装类为例)

二、再来看看几个示例

​编辑三、Double ,Float 类型亦是如此吗?


前言

        小伙伴们大家好,日常使用业务层方面的代码居多,但也不可忘了基本的一些代码格式以及原理,比如最近看到的一种题型,这里就涉及到了自动装箱的基础知识了

        Integer i = new Integer(10);Integer j = 10;Integer k = 10;System.out.println(i == j);   //falseSystem.out.println(k == j);   //true

一、自动装箱与拆箱(以 Integer 包装类为例)

        1、装箱就是自动将基本数据类型转换为包装器类型( int >> Integer),调用Integer.valueOf(int )方法

        2、拆箱就是反过来,将包装器类型转换为基本数据类型,调用了Integer.intValue方法

        3、java并不是一开始就支持自动拆装,查了下是在Java SE5之后才支持该功能

        自动装箱之后写法对比

        Java SE5之前:Integer i = new Integer(10);

        Java SE5之后:Integer i = 10;

二、再来看看几个示例

        1.比如前言中提到的 i 和 j 为什么不相等?

Integer i = new Integer(10)

         创建了一个新的Integer对象,而Integer j = 10; 则会自动装箱,实际上会调用Integer Integer j = 10

        实际上进行了装箱操作,相当于调用了Integer.valueOf(10)                 

        而由于10在缓存范围内,因此会复用缓存中的对象。

i和j虽然表示的是相同的值,但是i和j指向的是不同的对象,所以表达式 i == j 的结果是false

        2.通过new 关键字生成的Integer对象比较

        Integer i = new Integer(127);Integer j = new Integer(127);System.out.println(i == j);   //false

 ij 分别是通过 new Integer(127) 创建的两个不同的对象,会被强制创建为新的对象,而不是从缓存中获取。即使值相同,但它们在内存中的位置不同,因此比较 i == j 会返回 false

        3.Integer.valueOf 方法缓存的对象大小区间

        Integer k = 10;Integer l = Integer.valueOf(10);Integer l1 = Integer.valueOf(128);System.out.println(k == l);   //trueSystem.out.println(k == l1);  //false

Integer k = 10;

Integer l = Integer.valueOf(10);

    这两行代码执行时,都会将值为10的整数赋给Integer对象。在Java中,对于数值范围在-128到127之间的整数,会被缓存起来,所以当你比较 k == l 时,因为10在缓存范围内,它们实际上指向的是同一个对象,所以返回true。

          而当比较 k == l1 时,因为128不在缓存范围内,所以 Integer.valueOf(128) 会创建一个新的Integer对象,与 Integer k = 10; 创建的对象不同,因此返回false。

        来看下 Integer.valueOf 方法内部 ,制定了数值范围如果是在[-128,127]之间,返回IntegerCache缓存中已经存在的对象的引用,否则创建一个新的 Integer对象,所以k 和 l 指向的是同一个对象,k 和 l1 分别指向不同的对象

三、Double ,Float 类型亦是如此吗?

        Double i = 10.0;Double j = 10.0;Float i1 = 10.0f;Float j1 = 10.0f;Long i2 = 10l;Long j2 = 10l;System.out.println(i == j);   //falseSystem.out.println(i1 == j1);   //falseSystem.out.println(i2 == j2);   //true

         通过结果可以看出,Long 类型之外的都没有缓存的功能

因为为了性能和内存的考虑,只对整数类型的包装类(如Integer、Long等)进行了缓存优化,而没有对浮点数类型的包装类(如Float、Double等)进行缓存,具体分为以下几点。

  1. 整数类型的范围相对较小,而且常常被使用到,因此缓存能够显著提高性能。
  2. 整数类型的对象在程序中经常被频繁使用,缓存能够减少内存的占用和对象的创建次数。
  3. 对于浮点数类型,范围更广,而且通常不像整数类型那样被频繁使用。缓存这些类型可能会导致内存开销过大,而且由于浮点数的精度和计算方式的特殊性,可能会引入更多的问题而不是性能提升。

四、章末

        好了,文章到这里就结束了~ 

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

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

相关文章

ubuntu22.04@Jetson Orin Nano安装配置VNC服务端

ubuntu22.04Jetson Orin Nano安装&配置VNC服务端 1. 源由2. 环境3. VNC安装Step 1: update and install xserver-xorg-video-dummyStep 2: Create config for dummy virtual displayStep3: Add the following contents in xorg.conf.dummyStep 4: Update /etc/X11/xorg.con…

设计模式7--建造者模式

定义 案例一 案例二 优缺点

面试题1(京东)之HiveSql --- 难度:入门初级

第1题 有如下的用户访问数据 userIdvisitDatevisitCountu012017/1/215u022017/1/236u032017/1/228u042017/1/203u012017/1/236u012017/2/218u022017/1/236u012017/2/224 要求使用SQL统计出每个用户的累积访问次数,如下表所示: 用户id月份小计累积u01…

《云原生安全攻防》-- K8s集群安全风险分析

在这个数字化快速发展的年代,云原生安全变得越来越重要。我明白对于很多朋友来说,这是一个既新奇又复杂的领域。因此,我整合了以往的专业积累,精心打造了一个专门讲解云原生安全的系列课程,目的是能给大家带来有价值的…

微信小程序备案流程详细操作指南

自2023年9月1日起,所有新上架的微信小程序均需事先完成备案手续,方能成功上线。而对于已经上架的存量小程序,也需要在2024年3月31日前完成备案工作。若在规定时间内未完成备案,平台将依据备案相关规定,自2024年4月1日起…

TC16-161T+ 音频 信号变压器 RF Transformers 600kHz-160MHz 射频集成电路 Mini-Circuits

Mini-Circuits是一家全球领先的射频、微波和毫米波元器件及子系统制造商。TC16-161T是Mini-Circuits出产的一款射频IC(射频集成电路),具有平衡-不平衡转换器功用。制造商: Mini-Circuits 产品品种: 音频变压器/信号变压器 RoHS…

Git 如何合并多个连续的提交

我平常的编程喜欢是写一段代码就提交一次,本地一般不攒代码,生怕本地有什么闪失导致白干。但这样就又导致一个问题:查看历史日志时十分不方便,随便找一段提交可以看到: > git log --oneline 8f06be5 add 12/qemu-h…

OSPF基本原理和概念

文章目录 背景知识OSPF协议概述:OSPF区域的表示OSPF 骨干区域 –区域0OSPF 非骨干区域 -非0区域OSPF的五种区域类型OSPF工作原理OSPF 的报文类型OSPF邻居表中的七个状态 总结 背景知识 一台路由设备如何获取其他网段的路由,并加入到路由表中 直连路由 …

腾讯云2核2G服务器优惠价格,61元一年

腾讯云2核2G服务器多少钱一年?轻量服务器61元一年,CVM 2核2G S5服务器313.2元15个月,轻量2核2G3M带宽、40系统盘,云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图:…

Etag:HTTP缓存控制机制解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

无论PC还是Mac,都能畅快地使用移动硬盘 Mac使用NTFS移动硬盘不能读写

如果你拥有一台Mac设备,总会遇到尴尬的那一刻——你在Mac上用得好好的移动硬盘怎么都不能被PC识别到。又或者你朋友在PC上用得好好的移动硬盘,连上你的Mac后,Mac里的文件死活就是拷贝不进移动硬盘里。这种坑,相信大多数使用Mac的小…

.NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数

前言: 本次要讲的是使用.Net HttpClient拼接multipark/form-data形式post上传文件和相关参数,并接收到上传文件成功后返回过来的结果(图片地址,和是否成功)。可能有很多人会说用ajax不是就可以轻松的实现吗&#xff1f…

生信数据分析——GO+KEGG富集分析

生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析(Rstudio)3. KEGG富集分析(Rstudio) 1. 富集分析基础知识 1.1 为什么要做功能富集分析? 转录组学数据得到的基…

java多线程——概述,创建方式及常用方法

前言: 学习到多线程了,整理下笔记,daydayup!!! 多线程 什么是线程 线程(Thread)是一个程序内部的一条执行流程。若程序只有一条执行流程,那这个程序就是单线程的程序。 什么是多线程 多线程是指从软硬件上…

数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口:6379;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。 Redis 如果在没有开启认证的情况下,…

学生综合测评系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 1. 系统功能…

GitHub文件克隆到本地(GitHub desktop快速上手版)

使用 GitHub Desktop 轻松地克隆 GitHub 上的项目。 打开 GitHub Desktop 应用程序。 在菜单栏中,单击“文件”,然后选择“克隆存储库”。 在弹出的窗口中,选择要克隆的存储库: 单击与要克隆的仓库位置对应的选项卡。或者&#…

简明Pytorch分布式训练 — DistributedDataParallel 实践

上一次的Pytorch单机多卡训练主要介绍了Pytorch里分布式训练的基本原理,DP和DDP的大致过程,以及二者的区别,并分别写了一个小样作为参考。小样毕竟还是忽略了很多细节和工程实践时的一些处理方式的。实践出真知,今天(简…

深入理解数据结构(1):复杂度详解

文章主题:复杂度详解🌱所属专栏:深入理解数据结构📘作者简介:更新有关深入理解数据结构知识的博主一枚,记录分享自己对数据结构的深入解读。😄个人主页:[₽]的个人主页🔥…

【微服务】OpenFeign+Sentinel集中处理远程调用异常

文章目录 1.微服务基本环境调整1.对10004模块的application.yml调整2.启动nacos以及一个消费者两个提供者3.测试1.输入http://localhost:8848/nacos/index.html 来查看注册情况2.浏览器访问 http://localhost:81/member/nacos/consumer/get/13.结果 2.使用OpenFeign实现微服务模…