优秀的编程知识分享平台

网站首页 > 技术文章 正文

三十六、Java包装类_java包装累

nanyue 2025-02-19 13:15:19 技术文章 4 ℃

Java包装类(Wrapper Classes)是Java提供的一种特殊类,用于将基本数据类型(primitive data types)转换为对象(objects)。

为什么要有包装类

序号


描述

1

集合中使用基本数据类型

Java集合类(如ArrayList、HashSet等)只能存储对象,而不能直接存储基本数据类型。通过使用包装类,我们可以将基本数据类型转换为对象,从而可以在集合中使用它们。

2

提供额外的功能

包装类不仅允许我们在集合中使用基本数据类型,还提供了一些额外的功能和方法。例如,Integer类提供了将整数转换为二进制字符串的toBinaryString()方法。

3

自动装箱和拆箱

从Java 5开始,引入了自动装箱(autoboxing)和拆箱(unboxing)的概念。这意味着在需要时,Java会自动将基本数据类型转换为包装类对象(自动装箱),反之亦然(自动拆箱)。

Java提供了与八种基本数据类型对应的包装类:

基本类型

包装类

byte

java.lang.Byte

short

java.lang.Short

int

java.lang.Integer

long

java.lang.Long

float

java.lang.Float

double

java.lang.Double

char

java.lang.Character

boolean

java.lang.Boolean

创建包装类对象

Integer intObj = new Integer(10); // 使用构造函数创建对象
Integer intObj2 = Integer.valueOf(20); // 使用静态方法valueOf创建对象

自动装箱和拆箱

int primitiveInt = 10;
Integer wrapperInt = primitiveInt; // 自动装箱
int unwrappedInt = wrapperInt; // 自动拆箱

包装类的常用方法

Integer num = 123;
String binaryString = num.toBinaryString(); // 将整数转换为二进制字符串
boolean isEven = num.bitCount() % 2 == 0; // 使用bitCount方法判断是否为偶数(假设正整数)

缓存机制(以Integer为例)

对于Integer包装类,Java提供了一个特殊的缓存机制:对于值在-128到127之间的整数,Java会缓存这些对象,因此当你创建这些范围内的Integer对象时,实际上会得到缓存中的对象,而不是创建新的对象。

Integer a = 100;
Integer b = 100;
System.out.println(a == b); // 输出 true,因为两个引用指向同一个对象

Integer c = 128;
Integer d = 128;
System.out.println(c == d); // 输出 false,因为超过了缓存范围,创建了两个不同的对象

包装类用途总结

  1. 提供基本类型对象之间的桥梁,因为Java中的集合类(如List、Set、Map等)只能存储对象,不能直接存储基本类型的数据,因此需要将基本类型包装为对象才能放入集合中。
  2. 提供了一些基本类型不具备的方法,例如比较大小进制转换字符串转换等。
  3. 支持自动装箱(Autoboxing)和拆箱(Unboxing)功能。自Java 5.0开始,编译器会自动在基本类型与它们的包装类之间进行转换。
  4. 包装类内部维护了缓存机制,例如对于Integer,在-128至127之间的小整数值,会共享相同的对象实例,以提高性能和减少内存消耗。

总结

Java包装类为基本数据类型提供了对象包装,使得基本数据类型可以在需要对象的场合(如集合)中使用,并提供了额外的功能。同时,自动装箱拆箱机制简化了基本数据类型和包装类之间的转换过程。

最近发表
标签列表