📜  原始包装类在Java中是不可变的(1)

📅  最后修改于: 2023-12-03 14:50:31.604000             🧑  作者: Mango

原始包装类在Java中是不可变的

在Java中,原始包装类是一组用于封装基本数据类型的类。它们提供了一些有用的方法来处理基本类型的数据,并与其他类进行交互。原始包装类包括BooleanByteShortIntegerLongFloatDouble

一个重要的特性是原始包装类是不可变的,即一旦创建了一个包装对象,其值就无法改变。这意味着对于原始包装类对象,不能改变其内部的值,而只能创建一个新的包装对象来表示新的值。

以下是一些原始包装类的常规用法和特性:

创建原始包装类对象

可以使用构造函数或静态方法来创建原始包装类对象。例如,使用Integer类可以通过以下方式创建对象:

Integer myInt = new Integer(5); // 使用构造函数创建
Integer myInt2 = Integer.valueOf(10); // 使用静态valueOf方法创建
获取原始数据类型的值

可以使用一些方法从原始包装类对象中获取其对应的基本数据类型的值。例如,使用intValue()方法可以获取一个Integer对象的int值:

int value = myInt.intValue();
不可变特性

原始包装类的不可变特性意味着一旦创建了一个对象,就无法修改其值。如果需要修改一个原始包装类对象的值,只能创建一个新的对象。例如,修改一个Integer对象的值可以通过以下方式实现:

Integer newInt = myInt + 2; // 创建一个新的Integer对象,表示myInt的值加2
自动装箱和拆箱

Java中的自动装箱和拆箱特性使得原始类型和其对应的包装类型之间的转换更加方便。自动装箱是指将基本类型自动转换为对应的包装类型,而自动拆箱是指将包装类型自动转换为对应的基本类型。例如,可以直接将一个基本类型赋值给一个包装类型变量:

Integer myInt = 10; // 自动装箱
int value = myInt; // 自动拆箱
缓存机制

Java为一些原始包装类提供了缓存机制,以便经常使用的值可以被重用,从而提高性能和节省内存。例如,BooleanByte等原始包装类对于一定范围内的值提供了缓存。这意味着对于这些取值范围内的值,每次创建新对象都会返回缓存中的对象。因此,当创建一个新的对象时,应该使用静态方法valueOf()而不是使用构造函数。例如:

Boolean b1 = Boolean.valueOf(true); // 返回缓存中的Boolean对象
Boolean b2 = Boolean.valueOf(false); // 返回缓存中的Boolean对象
Boolean b3 = new Boolean(true); // 创建一个新的Boolean对象

原始包装类在Java中是不可变的,这种不可变性有助于确保对象的一致性和可靠性。它们提供了方便的方法来处理基本数据类型,并与其他类进行交互。通过了解原始包装类的特性和用法,程序员可以更好地使用它们来开发高效和可维护的Java程序。

参考资料: