1、包装类型
Java 数据类型
- 基本类型:
- byte,short,int,long
- float,double
- char,boolean
- 引用类型:八种基本类型之外的所有数据类型。
- 包含所有 class 和 interface 类型。
- 可以赋值为
null
,表示空(不存在)。
1.1、包装类
包装类(Wrapper Class)
-
目的:使基本类型拥有对象(引用类型)的性质,Java 提供了包装类。
-
类库:
java.lang
。定义了基本类型对应的包装类。基本类型 包装类型 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
1.1.1、不可变类
与
String
相同,包装类的声明、变量值均由
final
修饰。对象实例化后,无法改变。
以 Integer 为例:
public final class Integer {
private final int value;
}
1.1.2、比较变量值
-
基本类型:使用
==
直接比较。 -
包装类型:属于引用类型,
-
==
:比较地址。 -
equals()
:先判断obj
是否为当前包装类型,再比较数值。// 示例:Integer 的 equals() public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
-
1.1.3、获取变量值
数值类型的包装类(整数、浮点数)继承自 Number
。
便于直接通过包装类型获取基本类型。
// 向上转型为Number
Number num = new Integer(999);
// 获取byte, int, long, float, double
byte b = num.byteValue();
int n = num.intValue();
long ln = num.longValue();
float f = num.floatValue();
double d = num.doubleValue();
1.2、拆装箱
1.2.1、含义
-
装箱:基本类型 → 包装类型,使用静态方法
包装类.valueOf(参数)
。 -
拆箱:包装类型 → 基本类型。使用实例方法
包装类实例.xxxValue()
。int n = 100; Integer num = Integer.valueOf(int); // 装箱 int num1 = num.intValue(); // 拆箱
1.2.2、自动拆装箱
Java 1.5 语法糖
编译期优化,用于简化代码。
本质:编译器自动调用 valueOf(基本类型)
和 xxxValue()
方法。
-
自动装箱(Auto Boxing):
int num = 7; Integer num1 = Integer.valueOf(num); Integer num2 = num; // 自动装箱
-
自动拆箱(Auto Unboxing):
Integer num = 100; int num1 = num.intValue(); int num2 = num; // 自动拆箱
特点
- 影响代码执行效率。
- 基本类型和包装类型可以直接赋值,使用者无需考虑其区别。
- 在底层,字节码文件严格区分基本类型和引用类型。
- 相比对应类型的直接赋值,频繁的拆装箱操作会消耗性能。
- 自动拆箱可能报错 NPE。因为待拆箱变量可能为 null。
1.3、无符号整型处理
涉及知识:
标签:缓存,JavaSE5,包装,核心,int,static,类型,Integer,public From: https://www.cnblogs.com/secretmrj/p/17121143.html