八种基本类型的包装类你真的懂了?

进来先做个题:

        Integer i1 = 10;
        Integer i2 = 10;
        Integer i3 = 128;
        Integer i4 = 128;
        Integer i5 = 118;
        Integer i6 = new Integer(10);
        Float f1 = 10.0f;
        Float f2 = 10.0f;


        System.out.println("i1 == i2 ? " + (i1 == i2));
        System.out.println("i3 == i4 ? " + (i3 == i4));
        System.out.println("i1 == i6 ? " + (i1 == i6));
        System.out.println("10 == i6 ? " + (10 == i6));
        System.out.println("129 == i3 ? " + (128 == i3));
        System.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5));
        System.out.println("128 == i2 + i5 ? " + (128 == i2 + i5));
        System.out.println("f1 == f2 ? " + (f1 == f2));
        System.out.println("10.0f == f2 ? " + (10.0f == f2));

答案是多少呢?暂且不谈,最后再公布。

基本类型与包装类的区别:

1.包装类型可以为null而基本类型不可以。

  这点在pojo类里面很有用,因为在数据库里面定义的基本类型字段有可能值为null,
而这时如果将null赋值给基本类型属性就会报就会抛出 NullPointerException异常。
所以在与数据库交互的属性都应该定义为包装类型,除非明确的知道表中字段为非空字段。

2.包装类可以用于泛型,而基本类型不可以。

3.包装类型对象存储在堆中,基本类型存储在栈中

包装类型通过创建对象来存储数据,而对象是存储在jvm的堆中的,在栈中存储对象的引用,也就是对象所在堆中的地址。

基本类型在栈中存储的就是具体的数据,所以基本类型要比包装类型更加高效且节省空间。

4.自动装箱和自动拆箱

把基本类型转换为包装类型的的过程叫做装箱,把包装类型转换成基本类型的过程叫做拆箱。在Java SE5之后,java虚拟机会自动完成装拆箱的操作。

/* 
    自动装箱 当数值在-128 ~ 127 之间会调用静态的valueOf(int i)方法进行装箱,这是java虚拟机利用常量池技术默认创建了数值[-128,127] 的相应类型的缓存数据,返回的将是数值在常量池中的地址。当数值在这个范围之外才会去new一个对应类型的包装类

*/
Integer i = 10; // 自动装箱,虚拟机将会自动转换成:Integer i = Integer.valueOf(10);

Integer i = 128; // 自动装箱,虚拟机将会自动转换成:Integer i = new Integer(128);


int j = i; // 自动拆箱,虚拟机将会自动转换成:int j = i.intValue();

包装类和常量池

Java 基本类型的包装类中Byte,Short,Integer,Long,Character,Boolean都实现了常量池技术。

  • Byte,Short,Integer,Long,包装类默认创建了数值[-128,127] 的相应类型的缓存数据。
  • Character创建了数值在[0,127]范围的缓存数据。
  • Boolean 直接返回True or False。

如果超出对应范围仍然会去创建新的对象。 

最后

这时候你是否已经知道答案了呢?

        Integer i1 = 10;
        Integer i2 = 10;
        Integer i3 = 128;
        Integer i4 = 128;
        Integer i5 = 118;
        Integer i6 = new Integer(10);
        Float f1 = 10.0f;
        Float f2 = 10.0f;


        System.out.println("i1 == i2 ? " + (i1 == i2)); // true
        System.out.println("i3 == i4 ? " + (i3 == i4)); // false
        System.out.println("i1 == i6 ? " + (i1 == i6)); // false
        System.out.println("10 == i6 ? " + (10 == i6)); // true
        System.out.println("129 == i3 ? " + (128 == i3)); // true
        System.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5)); // true
        System.out.println("128 == i2 + i5 ? " + (128 == i2 + i5)); // true
        System.out.println("f1 == f2 ? " + (f1 == f2)); // false
        System.out.println("10.0f == f2 ? " + (10.0f == f2)); // true

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值