基本概念
java中的八种基本类型都有自己的包装类,从基本类型转换为包装类型称为自动装箱;从包装类型转换为基本类型称为自动拆箱。
基本类型 | 对应的包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
转换过程
自动装箱:基本类型向对应的包装类型转换需要调用对应包装类的valueOf()方法,例如Integer.valueOf()方法可以将int类型的值转换为Integer类型。
自动拆箱:包装类型向对应的基本类型转换需要调用对应包装类的方法,例如Intege.intValue()方法可以将Integer类型的值转换为int类型。
(注:这两种方式都是自动进行的,即自动装箱与拆箱)
代码如下所示:
int num = 66;
Integer number = num; //实际上为 Integer number = Integer.valueOf(num);
int newNum = number; //实际上为 int newNumber = number.intValue;
System.out.println(number);
验证:以下的代码会报空指针异常
Integer value = null;
int numValue = value; //实际上为 int numValue = value.intValue();
System.out.println(numValue);
拓展:一个简单的面试题
Integer value1 = 127;
Integer value2 = 127;
Integer value3 = 128;
Integer value4 = 128;
System.out.println(value1 == value2); //true
System.out.println(value3 == value4); //false
大家可能遇到过这样一道面试题,虽然数字一个为127,一个为128但结果不一样,下面看一下jdk中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);
}
从源码中可以看出,首先会先判断 i 的值是否在-128-127之间,如果在的话,直接返回Integer缓存中的值,否则new一个Integer实例再返回。