包装类
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
时, 可能会出现意外的结果, 所以推荐使用Inteher
的equals()
进行比较