Java基础-包装类

为什么要包装类?

在某些场景下,无法直接使用基本数据类型,所以还是需要使用对象,Java 的包装类就是这样出现的。例如泛型不支持基本类型,只能使用包装类来代替基本类型。又因为出于性能考虑保留了8个基本类型。

八个包装类

基本类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

自动装箱和自动拆箱

我们知道一段代码的执行过程中,最开始是一个叫javac的编译器将.java文件编译称为.class的文件,在这个过程当中下段代码会执行如下操作

 Integer b = 10;  
 //会被编译成  Integer b = Integer.valueOf(10);  //自动装箱
 int a = b;
 //会被编译成  int a = b.intValue();  //自动拆箱

自动装箱就是当把基本类型数据赋给相应的包装类时,把基本类型数据自动转成包装类的过程。

自动拆箱就是把包装类数据赋给基本类型时,把包装类数据自动转成基本类型的过程

128陷阱 

public static void main(String[] args) {
		Integer num1 = 100;
		Integer num2 = 100;
		System.out.println(num1 == num2);
		
		Integer num3 = 128;  
		Integer num4 = 128;
		System.out.println(num3 == num4);
}
/*
true
false
*/

答案就在Integet的valueOf()方当中,如果我们的数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间,所以不相等。

自动拆装箱和128陷阱小例题 

public static void main(String[] args) {
    int  a = 10;
    int  b = 10;
    Integer a1 = 10;
    Integer b1 = 10;
    Integer a2 = new Integer(10);
    Integer b2 = new Integer(10);
    System.out.println(a == b);  // T   基本数据类型 == 比较值
    System.out.println(a1 == b1);  // T  128陷阱
    System.out.println(a2 == b2);  // F  引用数据类型 == 比较地址
    System.out.println(a1 == a);  // T用 == 判断,自动拆箱
    System.out.println(a1.equals(a));  //T用equals()判断,自动装箱
    System.out.println(a1 == a2);//F
    System.out.println(a == a2);// T a2自动拆箱
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值