目录
1、包装类的定义
2、意义
3、八大基本类型的包装类
4、转换
5、自动拆箱和自动装箱
6、面试问题:请阐述128陷阱以及出现的原因
1、包装类的定义
把基本类型包装--包装类
2、意义
1、在面向对象中,“一切皆为对象”,但是基本类型不是不符合这一理念,为了统一此理念,为基本类型包装成引用类型的数据
2、基本类型对应的包装类型,除了可以满足基本类型的基本需求,还额外附加了丰富的能力,比如:涉及类型间的转换,数据类型间的基本操作(四舍五入等)
3、八大基本类型的包装类
基本类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
4、转换
Integer 为例:
基本类型与包装类的转换就是拆箱装箱的过程
Integer 为例:
int ------->Integer (装箱)
Integer ------->int(拆箱)
1、int -->Integer: 这样就可以使用Integer的方法 a1 点 就可以使用 a 点 就不行
使用Integer 的构造方法 参数为整形
int a = 10;
Integer a1 = new Integer(a);
//补充:使用Integer.valueOf()
int a = 10;
Integer a1 = Integer.valueOf(a);
2、Integer-->int:
使用Integer 中的intValue()方法,返回值类型为 int
Integer a1 =12;
int b = a1.intValue();
3、Integer-->String
使用Integer 中的toString()方法,返回值类型为String
Integer a1 =12;
String s = a1.toString();
4、String-->Integer
使用Integer 的构造方法 参数为String,
注意 s字符串的内容只能为数字
String a = "12234";
Integer s1 = new Integer(s);
5、int-->String
使用String中的valueOf()方法,返回值类型为String
int a = 10;
String b = String.valueOf(a);
6、String-->int
使用Integer 的parseInt()方法
String a = "12234";
int b = Integer.parseInt(a);
总结:其它类型 转 包装类,只需要使用包装类的构造方法,参数不同而已
包装类中有 自身 转成 各种类型 的方法,直接使用即可
5、自动拆箱和自动装箱
Java之前,基本类型和包装类型的转换是需要手动进行的,从java5之后开始提供自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)
自动装箱
int a = 10;Integer a1 = a;
自动拆箱
Integer b = new Integer(23);int bb = b;
6、面试问题:请阐述128陷阱以及出现的原因
Integer num1 = 100;Integer num2 = 100;System.out.println(num1==num2);----trueInteger num3 =128;Integer num4 =128;// byte 范围内:-128----127 相等 超过了就不相等System.out.println(num3==num4);----false
解释:
//因为是自动装箱 Integer num3 =128;
//默认使用的是 Integer ss = Integer.valueOf(11);
//valueOf方法如下:
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}
}
这个方法的传参在一定范围内会返回参数值,即默认创建了一个数组,如果在范围内直接使用即可,但是如果超出范围就会new 一个返回,就会新建一个地址,而 == 是比较地址 所以会返回false
原因:Integer 的valueOf()方法,如果数值在 -128--127 之间的数据都存储在一个catch数组中,该数组相当于一个缓存,当我们在 -128 --127 之间自动装箱的时候,程序会直接返回该值在数组的中内存地址,所以在 -128--127 之间的数值用 == 进行比较是相等,而不在这个区间的数,需要新开辟一个内容空间,所以不相等