1.包装器类型列表
你知道 Java 有 8 种原始类型,它们是不是类的类型。一方面,这很好——它们很简单,占用的空间也很小。另一方面,有时类正是我们所需要的。您将在下一课中找到确切原因。
那么可以做什么呢?
从 Java 的第五个版本开始,每个原始类型都获得了一个孪生类。每个这样的类都存储一个具有特定类型值的字段。这些类称为包装器类型,因为它们将原始值包装在类中。
这是这些类型的列表。你知道任何?
| 原始类型 | 包装类 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基本类型的名称以小写字母开头,而包装类的名称以大写字母开头。一些类名也有点长:Integerinstead of intи Characterinstead of char。
包装类的所有对象都是不可更改的(不可变的)。
该类的简化代码Integer如下所示:
| 代码 | 笔记 |
|---|---|
|
变量 构造函数 方法返回值 静态方法 Integer为int变量创建一个新对象 |
2. 将 an 转换int为 anInteger
包装器类型被认为是它们原始兄弟姐妹的对应物:您可以轻松地创建一个对应于原始类型的包装器对象。
下面我们以int类型为例,分析原始类型是如何与对应的包装类型进行交互的。int从 an到 an的转换代码Integer如下所示:
要将 an 转换int为 an Integer,您需要编写以下代码:
Integer name = new Integer(value);
其中name是变量名Integer,value是包装后的int值。
例子:
| 代码 | 笔记 |
|---|---|
|
|
|
|
|
要将 an 转换Integer为 an int,您需要编写以下代码:
int name = variable.intValue();
其中name是变量的名称int,variable是对对象的引用Integer。
例子:
| 代码 | 笔记 |
|---|---|
|
|
|
|
|
|
|
|
3. 自动装箱和拆箱
但即使是简单的类型操作Integer也不容易编写。
正如我们之前所说,Integer类型是不可改变的(immutable)。要创建Integer具有新int值的对象,您需要显式创建一个新Integer对象。也就是说,获取int存储在对象内部的值很容易Integer——只需调用该intValue()方法即可。
例子:
| 代码 | 描述 |
|---|---|
|
包裹5在一个Integer对象中从对象中获取值 创建一个新对象(等于10) IntegerInteger |
这是相当麻烦的代码,你不觉得吗?
Java 的创造者是这么认为的,所以他们教编译器如何自动执行这些操作。intan到 an的自动转换Integer称为自动装箱(自动将值放入盒子中),反向操作(将 an 转换Integer为 an int)称为拆箱。
| 你的代码 | 编译器看到了什么 |
|---|---|
|
|
|
|
|
|
由于自动装箱和拆箱,您可以安全地将 an 分配int给Integer变量,反之亦然。您可以编写任何复杂的表达式,而无需区分类型int和Integer类型。
例子:
| 代码 | 编译器将生成什么 |
|---|---|
|
|
|
|
4.比较包装器变量
自动装箱和拆箱是简单透明的过程。我们new Integer()根据需要使用语句,根据intValue()需要调用方法。
对程序员来说,一切都很好,很容易。请记住,如果您比较 anInteger和 an Integer,则比较基于参考而非值。
| 代码 | 控制台输出 |
|---|---|
|
|
|
|
和a变量b不存储int值。它们存储对对象的引用。这意味着记住如何正确比较它们很重要:
| 错误的 | 正确的 |
|---|---|
|
|
GO TO FULL VERSION