装箱和拆箱

装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。int包装成Integer、float包装成Float


拆箱:和装箱相反,将引用类型的对象简化成值类型的数据


基本数据类型的包装类是引用类型,基本类型是值引用,所以包装类是一个对象


Integer a = new Integer(100);
Integer b = 100;
System.out.println("m12 result " + (a == b));              // m12 result false


new Integer(100) 是创建一个对象,所以他的值是存在堆中,在栈中存的只是一个对象地址。 
Integer b = 100;这种赋值方式会自动调用Integer的valueOf()缓存(如果值大于127不会缓存)为基本类型,所以这个也就相当于 int b=100,
所以 b 的值是存在栈中,而==是值比较,所以输出的结果是false。

包装类型基本数据类型缓存对象(基本数据类型值)
Booleanbooleantrue,false(全部值)
Bytebyte -128~127(全部值)
Shortshort -128~127
Characterchar0~127
Integer int -128~127(默认为127)
Long long -128~127
Float float 无缓存值
Double double 无缓存值


当包装类声明的数据大于127或者小于-128时。就会重新再new一个新的包装类对象,把多余的数据存到新的包装类对象中




Float 和 Double不管声明的值是多少,都会return false,
public void m12() {
// a  b = 0.0也是false
Double a = 1.0;  
Double b = 1.0;  
System.out.println("m12 result " + (a == b)); // m12 result false
}

public static void test() {
        DataType dt = new DataType();
        dt.m11();
        dt.m12();
         
    }
 
    public void m11() {
        Integer a = new Integer(100);
        Integer b = 100;
        System.out.println("m11 result " + (a == b));                   //m11 result false
    }
 
    public void m12() {
      Integer a = new Integer(128);
        Integer b = 128;
        System.out.println("m12 result " + (a == b));                   //m12 result false
    }


public void m21() {
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println("m21 result " + (a == b));//m21 result false
}


public void m22() {
Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println("m22 result " + (a == b));//m22 result false
}


public void m31() {
        Integer a = 100;
        Integer b = 100;
        System.out.println("m31 result " + (a == b));//m31 result true
}


public void m32() {
        Integer a = 128;
        Integer b = 128;
      System.out.println("m32 result " + (a == b));//m32 result false
}


public void m41() {
Integer a = Integer.valueOf(100);
    Integer b = 100;
    System.out.println("m41 result " + (a == b));//m41 result true
}


public void m42() {
Integer a = Integer.valueOf(128);
        Integer b = 128;
        System.out.println("m42 result " + (a == b));//m42 result false
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值