包装类
包装类
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()进行比较
浙公网安备 33010602011771号