Day19 包装类 Integer底层

Day19 包装类 Integer底层

一、包装类

1、概念: 包装类(Wrapper Class)是一种用于将基本数据类型转换为对象的类。Java中的基本数据类型(如int、char、boolean等)是非对象的,为了能够在需要对象的上下文中使用它们,Java提供了对应的包装类。

2、理解: 8种基本数据类型对应类 :

1. Boolean:对应boolean    
2. Byte:对应byte 		
3. Short:对应short 		
4. Integer:对应int 		
5. Long:对应long 		
6. Float:对应float 		
7. Double:对应double
8. Character:对应char

3、出现原因:Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类/封装类。

注意:每个基本数据类型都有一个与之匹配的包装类。int的包装类的写法为Integer、char的包装类的写法是:Character,其余基本数据类型的包装类均是基本类型的首字母大写。

3、包装类常用方法

  1. 将基本数据类型转换为包装类对象

    java复制代码int num = 10;
    Integer obj = Integer.valueOf(num); // 将int转换为Integer对象
    
  2. 从包装类对象获取基本数据类型的值

    java复制代码Integer obj = new Integer(20);
    int num = obj.intValue(); // 从Integer对象获取int值
    
  3. 自动装箱(Autoboxing)和拆箱(Unboxing)

    java复制代码Integer obj = 30; // 自动装箱,将int转换为Integer对象
    int num = obj; // 自动拆箱,将Integer对象转换为int
    
  4. 使用包装类提供的方法

    java复制代码Integer num = 40;
    int binary = Integer.parseInt("1010", 2); // 将二进制字符串转换为int
    String hex = Integer.toHexString(num); // 将int转换为十六进制字符串
    

装箱:把基本数据类型包装为对应的包装类对象

Integer i1 = new Integer(10); // 利用构造方法

Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法

**拆箱:**把包装类对象转换为对应的基本数据类型。

int i3= i1.intValue(); //返回包装类对象对应的基本数据

前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。

java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。

a、 自动装箱:可以直接把一个基本数据类型赋值给包装类

例如: Integer i1 = 10; //自动装箱操作

b、 自动拆箱:可以直接把一个包装类对象,赋值给基本类型

例如:int a = new Integer(3); //自动拆箱。

自动装箱和自动拆箱,简化了对包装类的操作。

注意:需要理解自动装箱和拆箱的本质(底层也是手动装拆箱)

二、Integer底层原理

1、概念: Integerjava.lang.Integer类的包装类,用于表示整数数据类型int的对象形式。Integer类是不可变的,即一旦创建了Integer对象,其值就不能被修改。

2、描述:判断输入的int值是否在-128~127区间内,如果在就从Integer的缓存类的缓存数组中获取对象,如果不在就重新new对象。(引用类型的“==”是判断两个引用是否指向同一个对象)

3、主要底层原理:

  1. 缓存机制

    • Java在内部维护了一个整数缓存池,范围为-128到127。
    • 当调用Integer.valueOf(int)方法创建一个Integer对象时,如果参数在缓存范围内,将返回缓存中的对象,而不是新建对象。
    • 这种缓存机制可以提高性能,节省内存,避免频繁创建和销毁Integer对象。
  2. 装箱和拆箱

    • 装箱(Autoboxing):将基本数据类型转换为对应的包装类对象。
    • 拆箱(Unboxing):将包装类对象转换为对应的基本数据类型。
    • Java编译器会自动进行装箱和拆箱操作,使得基本数据类型和包装类之间的转换更加方便。
  3. valueOf()方法

    • Integer.valueOf(int)方法用于返回指定int值的Integer实例。
    • 该方法利用缓存机制,如果参数在缓存范围内,则返回缓存中的对象,否则创建新的Integer对象。
  4. intValue()方法

    • Integer.intValue()方法用于将Integer对象转换为int类型的值。
    • 这个方法是获取Integer对象包含的int值的常用方式。
  5. 常量池

    • Java中的整数常量池是在编译期间生成的,包含在-128到127范围内的整数。
    • 当使用整数常量时,会直接从常量池中获取,而不会创建新的Integer对象。

    注意Integer类的底层原理主要涉及缓存机制、装箱拆箱、valueOf()方法等,这些特性使得Integer类在处理整数数据时更加高效和方便。理解这些底层原理有助于更好地利用Integer类,并避免一些潜在的性能问题。

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

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

相关文章

mvn 相关命令汇总

1、需求 项目上一致是使用的mvn 进行打包, 对于项目上的一些mvn 命令,有时候会忘记,所以将mvn 汇总起来 2、命令汇总 ① mvn clean 将项目目录下的编译的文件清除掉,即target 文件夹的编译文件 ② mvn complie 编译项目的代码,生成class 文…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1,ISO镜像安装包 2,虚拟机(建议使用ESXI虚拟机环境) 如果是物理机安装,建议先给底层安装虚拟机系统esxi,再在上面安装方便以后的管理,如果你想物理机直接安装&a…

3.15消费者权益保护教育宣传活动怎样联系媒体投稿宣传?

在315金融消费者权益保护教育宣传活动中,想要有效地联系媒体报道并进行便捷宣传,可以通过以下步骤来利用智慧软文发布系统进行操作: 1. 准备宣传素材: - 制作高质量的新闻稿件,内容应围绕金融消费者权益保护的主题,包含活动的目的、特色、实施计划、预期影响、参与方式等细节;…

怎么看一手伦敦银多少钱?

做伦敦银投资的朋友需要搞清楚“一手伦敦银多少钱”的问题,这也是伦敦银交易的基础问题。为什么需要搞清楚这个基础问题呢?有些基础问题我们不需要搞懂,但是关于一手伦敦银多少钱却需要搞清楚,因为这决定了投资者的资金利用率。 关…

复合材料热压机比例阀放大器

复合材料热压机动作主要依赖于其内置的液压系统。是工业生产中常用的设备,通过施加高温和高压来实现对材料的压制成型。为了确保热压板能够精确地上下移动以及保持所需的压力,通常会使用液压系统来控制。液压系统中必不可少的需要比例阀来控制油缸的运行…

二进制1的个数(c++题解)

题目描述 统计一个十进制数中二进制1的个数 输入格式 一个int范围内的整数(可能为负数)。 输出格式 二进制1的个数。 样例 样例输入 复制2样例输出 复制1数据范围与提示 CPU是32位处理器 __________________________________________________…

0105行列式按行(列)展开-行列式-线性代数

在n阶行列式中,把 ( i , j ) 元 a i j (i,j)元a_{ij} (i,j)元aij​所在的第 i 行和第 j i行和第j i行和第j列划去后,留下来的 n − 1 n-1 n−1阶行列式叫做 ( i , j ) 元 a i j (i,j)元a_{ij} (i,j)元aij​的余子式,记作 M i j M_{ij} Mij​&…

APP内嵌微信H5支付完成后跳转浏览器问题如何解决

大家好我是咕噜美乐蒂,很高兴又和大家见面了! 在App内嵌微信H5支付完成后跳转到浏览器的场景中,涉及到了跨平台交互和支付流程的处理。这种情况通常会涉及到用户在微信H5支付页面完成支付后需要跳转到浏览器来展示支付结果或其他相关信息。以…

ReentrantLock的实现原理

ReentrantLock 是 Java 中的一个高级同步机制,它提供了比传统的 synchronized 方法和语句更灵活的锁定操作。ReentrantLock 实现了 Lock 接口,并且完全依赖于 AbstractQueuedSynchronizer (AQS) 的扩展来实现其同步行为。 ReentrantLock 特性 可重入: …

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法 一、需求二、实施步骤2.1 准备模型文件2.1.1 3D tiles模型2.1.2 3D Tiles标准文件格式 2.2 配置nginx server块2.2.1 Nginx能干啥 2.3 访问 三、实现效果 一、需求 利用三维渲染引擎Cesium加载3D tiles模型。 二、实…

(学习日记)2024.03.16:UCOSIII第十八节:任务的删除

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

下载JDK17版本详细教程(下载、安装、环境变量配置)

官网下载 Oracle 甲骨文中国 | 云应用和云平台 安装 更改自己的安装位置。点击下一步,记住自己的安装位置 环境配置 右键此电脑点击属性---高级系统设置----环境变量 在系统变量里面点击新建环境变量JAVA_HOME,下面填入自己的jdk安装地址&#xff0c…

关于微服务跨数据库联合查询的一些解决思路

微服务架构的一个非常明显的特征就是一个服务所拥有的数据只能通过这个服务的API来访问。通过这种方式来解耦,这样就会带来查询问题。以前通过join就可以满足要求,现在如果需要跨多个服务集成查询就会非常麻烦。 解决思路 下面提供几个思路仅供参考 表…

【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— Toggle切换按钮组件

概述 Toggle为切换按钮组件,一般用于两种状态之间的切换,例如下图中的蓝牙开关。 参数 Toggle组件的参数定义如下 Toggle(options: { type: ToggleType, isOn?: boolean })● type type属性用于设置Toggle组件的类型,可通过ToggleType枚举…

python异常:pythonIOError异常python打开文件异常

1.python读取不存在的文件时,抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件(该文件不存在),执行 open()打开一个不存在的文件时会抛 IOError 异常,通过 Python 所提供的 try...except...语句来接收…

linux查看服务器登录成功和登录失败的命令

last 查看成功登录服务器的信息,包括ip,时间,登录用户,时长。lastb 查看登录服务器失败的信息。 last命令实例: 其他参数: -a:把从何处登入系统的主机名称或ip地址,显示在最后一行…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 近年来,勒索病毒的威胁日益增加,其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点,以及如何恢复被其加密的数据文件,并提供预防措施&a…

Css提高——flex布局及其相关属性

目录: 1、传统布局与flex布局的区别 2、flex的布局原理 3、flex常见的父项属性 3.1、flex-direction :设置主轴的方向 3.2、justify-content 设置主轴上的子元素排列方式 3.3、flex-wrap 设置子元素是否换行 3.4、align-items 设置侧轴上的子元素排…

Linux:系统初始化,内核优化,性能优化(1)

我们安装好了一个服务器之后,一定要对他的系统,内核,性能一系列进行一个优化,否则当大并发的情况下很可能出现问题,我把要优化的东西直接罗列出来并介绍,后期可以直接编写一个脚本拿到服务器上直接用就行 …