装箱与拆箱

自动装箱与自动拆箱

  • 自动装箱
  • 自动拆箱

自动装箱

在java中有八种基本数据类型

  • boolean
  • byte
  • cha、
  • short
  • int
  • float
  • double
  • long
    每一种类都对应一个包装类
    我们以 int 为例
    int 的 包装类为Integer
    装箱:将一个值包装为一个包装类
    自动装箱 就是程序自动将一个值包装为一个包装类
Integer a = 1;
//Integer是一个 类 1 是一个int型数据 
// Integer a = 1;  == Integer a = Integer.valueOf(1);
// 其实该程序执行的是 Integer a = Integer.valueOf();将一个int型数据自动包装成一个Integer类型的对象 这就是 自动装箱
Integer b = 1;
Integer c = 321;
Integer d = 321;
System.out.println(a == b);
System.out.println(c == d);
true
false

== 运算符在次判断a 和 b 是否指向同一个对象
b 执行了 自动装箱操作 c没有执行自动装箱操作
当我们的值在 -128 ~ 127之间时 系统首先到缓冲池中寻找是否存在该值对应的对象 如果存在 则将对象直接赋给b(d)如果不存在则重新建立一个新的对象赋给b(d)。

自动拆箱

我们依然以int ——> Integer 为例
自动拆箱就是将包装成Integer类型的数据拆箱成int类型的数据

        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        System.out.println(c == (a+b));
        //当进行 a+b运算时 系统自动进行了拆箱操作 
        //a+b == a.intValue()+b.intValue();
        //将 a b 均拆为 int进行运算 两个int相加还是int 
        //‘==’运算符进行等值运算所以将 c 也拆箱 拆为 int 类型进行比较 
        //c.intValue() == (a.intValue()+b.intValue();
        //在此比较的就是 c 和 a+b 的值的大小
        System.out.println(c.equals(a+b));
        //大致相同 不同的是 equals 运算符是 等价运算 
        //所以将 a+b 的值进行自动装箱
        //c.equals(Integer.valueOf(a.intValue()+b.intValue());
       Integer a = 1;
       Integer b = 2;
       Integer c = 3;
       Integer d = 3;
       Integer e = 321;
       Integer f = 321;
       long g = 3L;
       System.out.println(c == d);
       System.out.println(e == f);
       System.out.println(c == (a+b));
       System.out.println(c.equals(a+b));
       System.out.println(g == (a+b));
true
false
true
true
true

你可能感兴趣的:(JVM,JAVAWeb初学者,算法分析)