Number 类属于 java.lang 包。
在实际开发过程中,经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。所有的包装类 (Integer, Long, Byte, Double, Float, Short,Character,Boolean) 是抽象类Number的子类。
这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。
Java 会对 -128 ~ 127 的整数进行缓存,所以当定义两个变量初始化值位于 -128 ~ 127 之间时,两个变量使用了同一地址;
当两个 Integer 变量的数值超出 -128 ~ 127 范围时, 变量使用了不同地址。
装箱和拆箱请看实例:
public static void main(String[] args) {
int a = 123;
int b = 123;
System.out.println(a == b);
Integer c = 123;
Integer d = 123;
System.out.println(c == d);
//Java 会对 -128 ~ 127 的整数进行缓存,所以当定义两个变量初始化值位于 -128 ~ 127 之间时,两个变量使用了同一地址
System.out.println(c.equals(d));
Integer e = 1234;
Integer f = 1234;
System.out.println(e == f);
Integer g = 1234; // 装箱,装箱就是自动将基本数据类型转换为包装器类型
g = g + 2; // 拆箱,拆箱就是自动将包装器类型转换为基本数据类型。
System.out.println(g);
}
运行结果:
true
true
true
false
1236
Character 类在对象中包装一个基本类型 char 的值,可以使用Character的构造方法创建一个Character类对象,使用Character类提供的一系列方法来操纵字符
char a = 'a';
char[] b = {'a', 'b','c'};
Character c = new Character('a'); // java9 已移除
Character d = 'a'; // 装箱,原始字符 'a' 装箱到 Character 对象 d 中