当前位置: 首页 > news >正文

Java-包装类

在 Java 编程中,我们经常会遇到基本数据类型与对象之间的转换问题,而包装类(Wrapper Class)正是解决这一问题的关键。本文将详细介绍 Java 包装类的概念、作用、常用方法及实际应用场景。

一、什么是包装类

Java 是一门面向对象的编程语言,但它同时保留了 8 种基本数据类型(byte、short、int、long、float、double、char、boolean),这些基本类型不是对象,不具备对象的特性。为了在面向对象编程中使用基本数据类型,Java 提供了对应的包装类,将基本数据类型包装成对象。

8 种基本数据类型对应的包装类如下:

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

其中,除了 Character 和 Boolean,其他包装类都继承自 Number 类。

二、包装类的主要作用

  1. 类型转换:实现基本数据类型与字符串之间的转换
  2. 泛型支持:泛型不能使用基本数据类型,必须使用包装类
  3. 集合框架:集合中只能存储对象,需要使用包装类存储基本数据类型
  4. 提供实用方法:包装类提供了许多操作基本数据类型的实用方法

三、包装类的使用

1. 装箱与拆箱

  • 装箱:将基本数据类型转换为对应的包装类对象
  • 拆箱:将包装类对象转换为对应的基本数据类型

Java 5 之后引入了自动装箱(Auto-Boxing)和自动拆箱(Auto-Unboxing)机制,简化了转换操作。

package 包装类;public class Test {public static void main(String[] args) {// 手动装箱Integer num1 = new Integer(10);// 自动装箱Integer num2 = 20;// 手动拆箱int value1 = num1.intValue();// 自动拆箱int value2 = num2;System.out.println("num1: " + num1);System.out.println("num2: " + num2);System.out.println("value1: " + value1);System.out.println("value2: " + value2);}
}

2. 常用方法

以 Integer 为例,介绍包装类的常用方法:

public class IntegerDemo {public static void main(String[] args) {// 字符串转整数int num = Integer.parseInt("123");// 整数转字符串String str = Integer.toString(123);// 获取最大值和最小值System.out.println("int最大值: " + Integer.MAX_VALUE);System.out.println("int最小值: " + Integer.MIN_VALUE);// 进制转换System.out.println("10的二进制: " + Integer.toBinaryString(10));System.out.println("10的八进制: " + Integer.toOctalString(10));System.out.println("10的十六进制: " + Integer.toHexString(10));}
}

四、注意事项

  1. 缓存机制:对于 Integer,在 - 128 到 127 之间的数值会被缓存,超过这个范围则会创建新对象
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // trueInteger c = 128;
Integer d = 128;
System.out.println(c == d); // false
  1. 空指针异常:自动拆箱时如果包装类对象为 null,会抛出 NullPointerException
Integer num = null;
int value = num; // 抛出NullPointerException
  1. 比较运算:使用==比较包装类对象时,比较的是地址;使用equals()方法比较的是值

五、总结

包装类在 Java 编程中扮演着重要角色,它弥补了基本数据类型不能作为对象使用的不足。掌握自动装箱与拆箱机制、理解缓存策略以及熟悉常用方法,能够帮助我们更高效地进行 Java 开发。

http://www.dtcms.com/a/349554.html

相关文章:

  • 深度学习-----《PyTorch神经网络高效训练与测试:优化器对比、激活函数优化及实战技巧》
  • 【数据结构】栈和队列——队列
  • 向量库Qdrant vs Milvus 系统详细对比
  • 线性回归入门:从原理到实战的完整指南
  • 数据结构——线性表(链表,力扣中等篇,技巧型)
  • Postman 模拟mcp tool调用过程
  • 【数据结构】顺序表详解
  • Flink hop window(滑动窗口)详解
  • leetcode 498. 对角线遍历 中等
  • Linux下的软件编程——网络编程(http)
  • C++14 到 C++20 全面解析:语言新特性、标准库演进与实战案例
  • 【二叉树 - LeetCode】617. 合并二叉树
  • [QMT量化交易小白入门]-八十三、8月因为通信行业,QMT平台ETF轮动策略年化达到了168.56%
  • 降本增效:基于 JavaScript 的 AI 编程 IDE 上下文压缩优化方案
  • CloudBase云开发MCP + CodeBuddy IDE:打造智能化全栈理财助手的完整实践
  • 本地生活新风口:“我店模式”入局正当时??
  • Web程序设计
  • 【前端安全】前端安全第一课:防止 XSS 和 CSRF 攻击的常见手法
  • 新型HTTP走私攻击技术使攻击者可注入恶意请求
  • 从0死磕全栈第1天:从写一个React的hello world开始
  • k8s笔记04-常用部署命令
  • 血缘元数据采集开放标准:OpenLineage Integrations Apache Spark Quickstart with Jupyter
  • SDC命令详解:使用set_timing_derate命令进行约束
  • 基于C语言实现的KV存储引擎(二)
  • ‌重塑培训架构,助力企业人才战略升级‌
  • 【C语言16天强化训练】从基础入门到进阶:Day 10
  • CPLD与FPGA
  • 《Password Guessing Using Large Language Models》——论文阅读
  • 企业级Java项目整合ELK日志收集分析可视化
  • [论文阅读]RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation