什么是包装类

什么是包装类

在Java中,包装类(Wrapper Class)是为基本数据类型提供的对应的引用类型。Java中的基本数据类型(如int、char、boolean等)不是对象,为了在需要对象的场景中使用基本数据类型(如集合框架、泛型等),Java提供了包装类。

每种基本数据类型都有对应的包装类:

  • byte → Byte
  • short → Short
  • int → Integer
  • long → Long
  • float → Float
  • double → Double
  • char → Character
  • boolean → Boolean

包装类可以将基本数据类型的值包装为对象,同时提供了许多用于操作基本数据类型的方法。

包装类是值类型还是引用类型,使用=会改变原来的对象吗?

  1. 包装类是引用类型:所有包装类都是java.lang包下的类,它们创建的实例都是对象,因此属于引用类型。

  2. 使用=不会改变原来的对象:当使用=为包装类变量赋值时,实际上是将引用指向了新的对象,而不是修改原来的对象。因为包装类是不可变的(immutable),它们的内部值一旦创建就无法修改。

示例:

Integer a = new Integer(10);
Integer b = a;
b = new Integer(20);
// 此时a仍然是10,b是20,a的值没有被改变

包装类的缓存机制

Java中部分包装类提供了缓存机制,对一定范围内的值进行缓存,以提高性能和减少内存占用。当使用自动装箱或valueOf()方法创建对象时,会优先使用缓存中的对象。

包装类缓存范围缓存机制说明
Byte-128 ~ 127全部缓存,范围内的值会复用同一个对象
Short-128 ~ 127固定范围缓存,超出范围会创建新对象
Integer-128 ~ 127默认范围缓存,可通过JVM参数调整上限
Long-128 ~ 127固定范围缓存,与Short相同
Character0 ~ 127缓存ASCII字符范围内的字符
Float无缓存没有实现缓存机制
Double无缓存没有实现缓存机制
Booleantrue和false只缓存两个静态实例:TRUE和FALSE

缓存机制示例:

Integer i1 = 100;    // 自动装箱,使用缓存
Integer i2 = 100;
System.out.println(i1 == i2);  // true,指向同一个缓存对象Integer i3 = 200;    // 超出缓存范围
Integer i4 = 200;
System.out.println(i3 == i4);  // false,指向不同对象

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

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

相关文章

用Python打造专业级老照片修复工具:让时光倒流的数字魔法

在这个数字化时代,我们手中珍藏着许多泛黄、模糊、甚至有划痕的老照片。这些照片承载着珍贵的回忆,但时间的侵蚀让它们失去了往日的光彩。今天,我将带您一起用Python开发一个专业级的老照片修复工具,让这些珍贵的记忆重现光彩。为…

linux中查找包含xxx内容的文件

linux中怎么查找哪个文件包含xxx内容 在Linux中查找包含特定内容的文件 在Linux系统中,有几种常用方法来查找包含特定内容的文件。以下是几种最有效的方法:1. 使用 grep 命令(最常用) 基本语法:bash grep -r "搜索…

sklearn 加州房价数据集 fetch_california_housing 出错 403: Forbidden 修复方案

问题 加载加州房价数据时出现 403 错误 HTTP Error 403: Forbidden from sklearn.datasets import fetch_california_housingcalifornia fetch_california_housing() print(california.target.shape) 解决方案 运行下述代码,然后再运行上述的 fetch_california_hou…

嵌入式学习---(硬件)

1、在LED实验中,在对Soc引脚配置时都做了哪些工作?复用功能配置操作寄存器:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03将引脚的低 4 位设置为 0101,将引脚复用为 GPIO 功能电气特性配置操作寄存器:IOMUXC_SW_PAD_CTL_PAD_GPIO1…

微信小程序开发教程(十一)

目录:1.上拉触底案例-初步实现上拉触底效果2.上拉触底案例-添加loading效果3.上拉触底案例-节流处理4.扩展-自定义编译模式1.上拉触底案例-初步实现上拉触底效果页面加载的时候调用这个方法:设置样式:下拉触底后继续调用获取颜色的方法2.上拉…

Android相机API2,基于GLSurfaceView+SurfaceTexture实现相机预览,集成的相机算法采用GPU方案,简要说明

Android相机API2,基于GLSurfaceViewSurfaceTexture实现相机预览,集成的相机算法采用GPU方案,简要流程如下(不叠加相机算法的预览显示流程也大体如此,只是去掉了算法部分):进入相机:1,新建实现了…

[code-review] 日志机制 | `LOG_LEVEL`

第6章:日志机制(调试) 欢迎来到我们了解ChatGPT-CodeReview项目的最后一章 在第5章:文件过滤逻辑(范围管理器)中,我们学习了机器人如何智能地决定哪些文件需要发送给AI审查。 但一旦机器人开…

n8n工作流平台入门学习指南

目录 1、基础背景 2、核心概念 2.1 节点(Nodes) 2.2 连接(Connections) 2.3 工作流(Workflows) 3、常用节点说明 4、基于Docker快速部署 5、学习资料 6、常见问题 强烈推荐,大家不懂的直接问:N8N大师(GPT),科…

【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG

📑 目录🔍 问题背景⚠️ 常见拼接方式的限制💡 XMLAGG 的解决方案📝 示例代码📌 注意事项✅ 总结🔍 问题背景在日常开发中,我们经常需要把多行数据拼接成一个字符串。例如将某个字段的多条记录拼…

AJAX入门-URL、参数查询、案例查询

本系列可作为前端学习系列的笔记,代码的运行环境是在VS code中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML、CSS、JavaScript系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查…

【SpringBoot】24 核心功能 - Web开发原理 -Spring Boot 异常处理机制

前言 在开发 Web 应用程序时,异常处理是一个至关重要的部分。Spring Boot 提供了一套强大的异常处理机制,使得开发者能够轻松地处理和响应各种异常情况。本文将深入探讨 Spring Boot 中的异常处理机制,包括默认的错误处理规则、定制错误处理逻…

JVM第一部分

PC寄存器:存储的是数字 0, 3, 6, 10, 17 这样的字节码偏移量。 LineNumberTable:是一个映射表,它将上述的偏移量“翻译”成我们程序员能看懂的源代码行号。 JVM堆 JVM堆由两部分组成:年轻代老年代 年轻代包括三部分:ed…

IDEA使用Maven和MyBatis简化数据库连接(配置篇)

目录: Maven:简化项目构建 MyBatis:简化Jdbc Maven:是一款项目构建与依赖管理工具,核心作用是自动化项目编译、打包等流程,并统一管理项目所需的第三方 Jar 包(如 MyBatis 的 Jar 包)。 MyBatis&#xf…

Java 泛型详解:从基础到高级应用

目录 一、泛型的基本概念 为什么需要泛型? 二、泛型类与泛型接口 【1】定义泛型类 【2】定义泛型接口 三、泛型方法 四、泛型通配符 【1】无界通配符(?) 【2】上界通配符(? extends T) 【3】下界通配符&am…

嵌入式 Linux 启动机制全解析:从 Boot 到 Rootfs

🚀 嵌入式 Linux 启动机制全解析:从 Boot 到 Rootfs 在嵌入式系统中,Linux 的启动流程不仅是内核加载的过程,更是 bootloader、设备树、初始根文件系统、启动配置文件等多个组件协同工作的结果。不同的文件系统和启动方式会影响系…

Python 操作Office的PPT、Word、Excel,同时兼容WPS

文章目录概要一、环境准备1. 安装必要的Python库2. 系统要求二、核心实现原理1. 检测已安装的Office类型2. 初始化对应的应用程序三、完整代码实现四、使用示例五、WPS兼容处理详解1. 形状和文本框访问兼容处理2. PPT图片粘贴兼容处理3. 资源释放的重要性六、图片操作实现详解1…

ISP之DHCPv6-PD(前缀代理)为用户下发前缀

一、组网需求家庭用户要使用IPv6地址接入互联网。为方便用户接入,运营商使用DHCPv6-PD的方式给家用路由器下发IPv6地址前缀,用户路由器LAN侧不需要手工指定链路的IPv6地址前缀,家用路由器可以给用户终端自动配置IPv6地址和其它网络参数。本例…

Django全栈班v1.04 Python基础语法 20250912 上午

rm 删除命令 注意:删除操作是不可逆的,一旦删除就无法撤销,请谨慎使用。删除文件: rm file.py递归删除目录: rm -r demo/强制删除: rm -f file.py交互式删除: rm -i *.txt课程定位 “学习Python…

Java 21 虚拟线程高并发落地:中间件适配、场景匹配与细节优化的技术实践

作为 Java 21 的核心特性,虚拟线程(Virtual Thread)凭借 “用户态调度”“轻量级资源占用” 的优势,成为高并发场景下线程模型优化的重要方向。但在实际落地中,不少团队会陷入 “技术用了却没效果” 的困境 ——QPS 提升有限、中间件调用阻塞、CPU 使用率异常升高。 本文…

数据库在并发访问时,不同隔离级别下脏读幻读问题

数据库隔离级别并非安装后就固定,绝大多数主流数据库(如MySQL、PostgreSQL、SQL Server)都支持动态调整和运行中自定义,具体调整范围可分为全局、会话和语句三个层级。 全局级别调整:修改数据库配置文件(如…