包装类

包装类

java.lang.*是为了给对应着的基本类型, 提供丰富的功能

对应关系

基本类型 包装类 父类
byte Byte Number
short Short Number
int Integer Number
long Long Number
float Float Number
double Double Number
boolean Boolean Object
char Character Object

包装类常用方法

所有包装类的方法都大同小异, 熟练了一个, 其他都是这个模板

这里以Integer为例:

构造方法

Integer(int value) 构造一个新分配的 Integer对象,该对象表示指定的 int值。
Integer(String s) 构造一个新分配 Integer对象,表示 int由指示值 String参数。

常用静态方法

返回值 方法 说明
int intValue() Integer转为int类型(拆箱)
其他包装类的方法名字例如: DoubleValue()
Integer valueOf(int i) int类型转为Integer(装箱)
int parseInt(String str) 将一个String转为int类型的十进制数

自动拆箱装箱

// 自动装箱
Integer a = 100; 
// Integer a = new Integer(100); //  不推荐使用

// 自动拆箱
int b = a;

创建方式对比

Integer in = new Integer(2);
Integer in2 = Integer.valueOf(2);// 高效, 如果是相同的数据, 则不会开辟新的空间, 但是有特殊情况, 请见下面的Integer缓存

验证

Integer in2 = Integer.valueOf(2);
Integer in3 = Integer.valueOf(2);
System.out.println(in2 == in3); // 结果: true

由此可见, 使用valueOf()如果存在相同的数据, 则不会开辟新的空间, 建议使用!

Integer的缓存

Integer里有一个缓存空间(源码中可见, 是一个缓存数组), 范围是一个字节的范围, 即-128~127, 上面创建方式对比说到Integer in2 = Integer.valueOf(2);高效, 是因为 如果是相同的数据, 则不会开辟新的空间. 但是如果范围超出了这个缓存范围, 那么还是会开辟新的空间的

代码示例:

Integer x1 = 127;
Integer x2 = 127;

Integer x3 = 128;
Integer x4 = 128;

System.out.println(x1 == x2);
System.out.println(x3 == x4);

// 或者你可以这么写(等效上面的写法)
// Integer x1 = Integer.valueOf(127);
// Integer x2 = Integer.valueOf(127);

// Integer x3 = Integer.valueOf(128);
// Integer x4 = Integer.valueOf(128);

// System.out.println(x1 == x2);
// System.out.println(x3 == x4);

运行结果:

true
false

所以, 当使用==比较Integer时, 可能会出现意外的结果, 所以推荐使用Inteherequals()进行比较

posted @ 2020-05-16 12:19  zpk-aaron  阅读(126)  评论(0编辑  收藏  举报