1.基础概念
Java中所有的基本类型都有其对应的包装类
基础类型:
boolean char byte int float double long
包装类
Boolean Character Byte Integer Float Double Long Short Void
所谓的装箱就是一个包装类对象接收了一个基础类型对象,这时候就会发生装箱
,将基础类型对象转化成包装类对象,下面使用例子说明
public static void main(String[] args) {
Integer ii = 5;
ii++;
}
在Integer ii = 5; 这行设置断点。
由图片可知, Integer ii = Integer.valueOf(5);
继续向下debug 当运行 ii++时由于++运算符只能对基本数据进行操作
所以ii先会拆箱为int类型再装箱为integer类型
拆箱
运算完成后会装箱成integer类型
陷阱
包装类 Character Integer Float Double Long
在进行==比较时的陷阱
public static void main(String[] args) {
Integer i1 = 15;
Integer i2 = 15;
Integer i3 = 1000;
Integer i4 = 1000;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
Character c1 = 15;
Character c2 = 15;
Character c3 = 300;
Character c4 = 300;
System.out.println(c1 == c2);
System.out.println(c3 == c4);
Float f1 = (float) 15;
Float f2 = (float) 15;
Float f3 = (float) 1500;
Float f4 = (float) 1500;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
Long l1 = (long) 15;
Long l2 = (long) 15;
Long l3 = (long) 1500;
Long l4 = (long) 1500;
System.out.println(l1 == l2);
System.out.println(l3 == l4);
Double d1 = 15.1;
Double d2 = 15.1;
Double d3 = 1500.1;
Double d4 = 1500.1;
System.out.println(d1 == d2);
System.out.println(d3 == d4);
}
结果
true
false
true
false
false
false
true
false
false
false
包装类 Character Integer Long 都具有缓冲池 如果其大小[-128-127]之间直接返回缓存池中的对象 所以比较结果为true 超出范围 就好new一个新对象 那么两个的引用就不同了所以为false
包装类 Float Double 无缓冲池 所以无论大小如何结果都为false
类型装换
两个操作数进行二元操作时,要先转为同一类型再计算
- 两个数中有一个为double 则另一个数为double类型
- 否则 其中有一个数为float类型 另一个操作数为float类型
- 否则 如果有一个为long类型 另一个操作数为long类型
- 否则两个都为int类型
小数类型默认为double类型
Float f3 = (float) 1500;
Long l1 = (long) 15;
所以需要强转
数值进行二元计算最小为int类型所以要进行强制转换
byte i1 = 1;
byte i2 = 2;
i1 = (byte) (i1 + i2);
i1 += i2;
char a = 1;
char b = 1;
a = (char) (a + b);
a += b;
a++;
short s = 1;
short s1 = 1;
s = (short) (s + s1);
到此类型转换以及拆装箱至此差不多结束了
水平有限 若有错误 欢迎指正
参考书籍《Java核心技术》