Java 包装类(Wrapper)
Java 包装类(Wrapper)
目录
1 包装类Wrapper概述
-
作用: 用于将原始类型(int,char,float等)转换为相应的对象。
-
8个基本类型中的每一个都有对应的包装器类。
基本数据类型 包装类 byte Byte boolean Boolean char Character double Double float Float int Integer long Long short Short
2 Integer 类
Constructor | Description |
---|---|
Integer(int value) |
构造一个新分配的 Integer 对象,该对象表示指定的 int 值。 |
Integer(String s) |
构造一个新分配 Integer 对象,表示 int 由指示值 String 参数。 |
static Integer valueOf(int i) |
返回一个 Integer 指定的 int 值的 Integer 实例。 返回表示指定的 int 值的 Integer 实例 |
static Integer valueOf(String s) |
返回一个 Integer 对象,保存指定的值为 String 。 |
package com.fcarey.wrapper;
public class IntegerDemo {
public static void main(String[] args) {
Integer i1 = new Integer(1);
System.out.println(i1);
Integer i2 = new Integer("2");
System.out.println(i2);
Integer i3 = Integer.valueOf(3);
System.out.println(i3);
Integer i4 = Integer.valueOf("4");
System.out.println(i4);
}
}
3 自动装箱和拆箱
自动装箱和拆箱就是 Java 编译器自动处理基本数据类型与包装类之间的转换,使程序员无需手动编写繁琐的代码。
-
自动装箱(Autoboxing): 是指将基本数据类型自动转换为相应的包装类对象。即:将一个
int
类型的值直接赋值给Integer
类型的变量,而无需显式创建Integer
对象。 -
自动拆箱(Unboxing): 自动拆箱是指将包装类对象自动转换为相应的基本数据类型。这意味着,你可以直接将一个
Integer
对象赋值给int
类型的变量,而无需显式调用.intValue()
方法。 -
package com.fcarey.wrapper; public class IntegerDemo2 { public static void main(String[] args) { Integer i1 = 1; // 自动装箱 Integer i2 = i1 + 2; // i1 + 2 自动拆箱;i2 = i1 + 2; 是自动装箱 System.out.println(i2); } }
- 1 是一个基本数据类型的整型常量;
- 而
i1
是一个Integer
类型的变量。通过自动装箱,i1
的值被自动封装为Integer
对象。 i1
是一个Integer
类型的对象,通过自动拆箱,它的值被自动提取为一个基本数据类型的int
,并与2
值进行相加得到一个基本数据类型的整形常量。- 而
i2
是一个Integer
类型的变量。通过自动装箱,i1 + 2
的值被自动封装为Integer
对象。
-
自动装箱和拆箱的好处
- 提高可读性: 自动装箱和拆箱使得代码更加清晰和简洁,不需要频繁地进行类型转换。
- 减少错误: 自动装箱和拆箱减少了因类型转换错误而引发的 bug,因为编译器可以在编译时进行类型检查。
- 更容易使用集合类: 自动装箱和拆箱使得将基本数据类型放入集合类(如
ArrayList<Integer>
)变得更加容易,而无需手动转换。 - 提高性能: Java 的新版本中对自动装箱和拆箱进行了性能优化,使得它们的性能更好。
-
自动装箱和拆箱的注意事项
- 性能考虑: 尽管 Java 的性能优化有所改进,但在高性能要求的场景中,频繁的自动装箱和拆箱操作可能会导致性能下降。在这种情况下,建议手动管理类型转换。
- 空指针异常: 自动拆箱可能会引发
NullPointerException
,因为包装类对象可能为null
。在拆箱之前,最好进行空值检查。
4 int 和 String 类型的相互转换
4.1 int 转换为 String
转换方式
- 方式一:直接在数字后加一个空字符串
- 方式二:通过String类静态方法
valueOf()
package com.fcarey.wrapper;
public class IntegerDemo3 {
public static void main(String[] args) {
int i = 1;
System.out.println(i + " " + 2);
System.out.println(String.valueOf(i) + 2);
}
}
4.2 String 转换为 int
转换方式
- 方式一:先将字符串数字转成Integer,再调用valueOf()方法
- 方式二:通过Integer静态方法parseInt()进行转换
package com.fcarey.wrapper;
public class IntegerDemo4 {
public static void main(String[] args) {
String s = "1";
//方式1:String --- Integer --- int
Integer i1 = Integer.valueOf(s);
int i2 = i1.intValue();
System.out.println(i2 + 2);
// 方式2: 通过Integer静态方法parseInt()进行转换
int i3 = Integer.parseInt(s);
System.out.println(i3 + 2);
}
}