Java包装类

简介: Java包装类

一、引言

 

Java中,基本数据类型(如intfloatboolean等)虽然简洁高效,但它们并不具备对象的特性,如继承、多态等。为了弥补这一不足,Java为每个基本数据类型都提供了一个对应的包装类(Wrapper Class),使得基本数据类型能够拥有对象的行为。包装类不仅提供了丰富的操作基本数据类型的方法,还使得基本数据类型能够与对象进行交互,从而极大地扩展了基本数据类型的应用范围。本文将详细解析Java包装类的基本特性、常用方法以及使用场景,并通过代码示例来展示其实际应用。

 

二、包装类的基本特性

 

自动装箱与拆箱

Java 5引入了自动装箱(Autoboxing)和拆箱(Unboxing)机制,使得基本数据类型与其对应的包装类之间可以自动转换。这大大简化了代码,提高了开发效率。

 

自动装箱:基本数据类型自动转换为对应的包装类对象。

Integer i = 10; // 自动装箱,相当于 Integer i = Integer.valueOf(10);
自动拆箱:包装类对象自动转换为对应的基本数据类型。
int j = i; // 自动拆箱,相当于 int j = i.intValue();

缓存机制

对于byteshortintlongchar这五个包装类,Java提供了缓存机制,当使用valueOf方法创建对应范围内的值时,会返回缓存中的对象,而不是创建新的对象。这有助于提高性能并减少内存消耗。

 

例如:

Integer a = Integer.valueOf(127);  
Integer b = Integer.valueOf(127);  
System.out.println(a == b); // 输出 true,因为127在缓存范围内  
  
Integer c = Integer.valueOf(128);  
Integer d = Integer.valueOf(128);  
System.out.println(c == b); // 输出 false,因为128超出了缓存范围,会创建新的对象

三、常用方法

 

每个包装类都提供了一系列用于操作对应基本数据类型的方法。以下是一些常用的方法示例:

 

Integer

Integer num = 10;  
int primitiveNum = num.intValue(); // 转换为基本数据类型int 
String strNum = num.toString(); // 转换为字符串  
Integer parsedNum = Integer.parseInt("123"); // 将字符串解析为Integer对象  
boolean isEven = num.bitCount() % 2 == 0; // 判断是否为偶数
Double类
Double doubleValue = 3.14;  
double primitiveDouble = doubleValue.doubleValue(); // 转换为基本数据类型double  
String doubleStr = doubleValue.toString(); // 转换为字符串  
Double parsedDouble = Double.parseDouble("3.14159"); // 将字符串解析为Double对象
Boolean类
Boolean flag = true;  
boolean primitiveFlag = flag.booleanValue(); // 转换为基本数据类型boolean  
String flagStr = flag.toString(); // 转换为字符串

其他包装类(如FloatLongCharacter等)也提供了类似的方法用于操作对应的基本数据类型。

 

四、使用场景

 

集合类元素

Java集合类(如ListSetMap等)只能存储对象,而不能直接存储基本数据类型。因此,当需要将基本数据类型存储在集合中时,需要将其转换为对应的包装类对象。

List numbers = new ArrayList<>();  
numbers.add(1); // 自动装箱  
numbers.add(2);  
int firstNumber = numbers.get(0); // 自动拆箱

泛型

泛型是Java 5引入的一个新特性,它允许在定义类、接口和方法时使用类型参数。由于泛型只能接受类型参数,因此当需要使用基本数据类型作为类型参数时,必须将其转换为对应的包装类。

ArrayList intList = new ArrayList<>(); // 使用Integer包装类作为类型参数反射

Java反射机制允许程序在运行时动态地获取类的信息并操作对象。由于反射是基于对象的,因此当需要操作基本数据类型时,也需要使用其对应的包装类。

Class intClass = Integer.class; // 获取Integer类的Class对象  
Integer intValue = (Integer) intClass.newInstance(); // 创建Integer对象实例
目录
相关文章
|
5月前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
16天前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
24 9
Java——包装类和泛型
|
2月前
|
Java 程序员
【Java基础面试八】、为啥要有包装类?
这篇文章解释了Java中存在包装类的原因:为了让基本数据类型具备对象的特性,使得它们可以被用作对象,以符合Java"一切皆对象"的设计理念,并简化将基本数据类型作为Object类型参数传递的问题。
【Java基础面试八】、为啥要有包装类?
|
1月前
|
存储 Java 测试技术
Java零基础教学(10):包装类
【9月更文挑战第1天】Java零基础教学篇,手把手实践教学!
21 1
|
2月前
|
前端开发 Java
【前端学java】java中的包装类(12)
【8月更文挑战第10天】java中的包装类
14 1
|
2月前
|
存储 Java 测试技术
Java零基础(11) - 包装类详解
【8月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
37 1
|
2月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
29 5
|
3月前
|
存储 Java 测试技术
day18:Java零基础 - 包装类
【7月更文挑战第18天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 9
|
2月前
|
Java API
【Java】Object、Objects、包装类、StringBuilder、StringJoiner
【Java】Object、Objects、包装类、StringBuilder、StringJoiner
|
3月前
|
存储 Java
Java中的基本数据类型及其包装类
Java中的基本数据类型及其包装类
下一篇
无影云桌面