包装类(Wrapper Class)
八个和基本数据类型对应的类统称为包装类(Wrapper Class)
基本数据类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
short | Shrot |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类的缓存
包装类 | 缓存范围 |
---|---|
Integer | [-128, 127] |
Long | [-128, 127] |
Short | [-128, 127] |
Byte | [-128, 127] |
Character | [0, 127] |
Boolean | True,False |
具体可以查看对应包装类的valueOf代码实现。
// Integer valueOf代码实现
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
因此会有如下现象:
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1 == i2); // true
System.out.println(i3 == i4); // false
代码
Integer i = 10; // 装箱使用Integer.valueOf()
int n = i; // 拆箱使用Integer.intValue()
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
Long l1 = 200L;
Long l2 = 300L;
// 包装类的+、-、*、/都会先进行拆箱后再进行运算。
Long l3 = i1 + l1; // 100 + 200L = 300L -> Long
System.out.println(l1.equals(i1 + i2)); // false i1 + i2 => Integer
System.out.println(l2.equals(i1 + l1)); // true i1 + l1 => Long
Integer i5 = 50 + 50;
System.out.println(i1 == (50 + 50)); // true
System.out.println(i1 == i5); // true