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对象实例
目录
相关文章
|
7月前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
22天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
44 4
|
3月前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
39 9
Java——包装类和泛型
|
2月前
|
Java
【Java】什么是泛型?什么是包装类
【Java】什么是泛型?什么是包装类
18 0
|
4月前
|
Java 程序员
【Java基础面试八】、为啥要有包装类?
这篇文章解释了Java中存在包装类的原因:为了让基本数据类型具备对象的特性,使得它们可以被用作对象,以符合Java"一切皆对象"的设计理念,并简化将基本数据类型作为Object类型参数传递的问题。
【Java基础面试八】、为啥要有包装类?
|
3月前
|
存储 Java 测试技术
Java零基础教学(10):包装类
【9月更文挑战第1天】Java零基础教学篇,手把手实践教学!
46 1
|
4月前
|
前端开发 Java
【前端学java】java中的包装类(12)
【8月更文挑战第10天】java中的包装类
24 1
|
4月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
38 5
|
4月前
|
存储 Java 测试技术
Java零基础(11) - 包装类详解
【8月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
52 1
|
5月前
|
存储 Java 测试技术
day18:Java零基础 - 包装类
【7月更文挑战第18天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
42 9