Java-包装类

由于Java 是个面向对象语言,所有的操作都是基于对象。Object 类是所有 Java 中的类的爷爷类,所以Object 类可以表示任意类型数据。但 Java 中的 8 种基本数据类型并不是对象,没有对象的操作。因此需要包装类作为过渡,让class类与基础数据类型相联系。

包装类是对基础类型数据的包装,让基础数据类型“伪装”成类,具有类的特性,可以进行类的方法操作。

基本数据类型包装类
byteByte
booleanBoolean
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
package com.joeaaa.demo09;

public class BoxingClassTest {
    public static void main(String[] args) {
        int i0 = 10;
        /*
        * JDK1.5之前,手动装箱拆箱
        * 即:自动将基本数据类型转换成包装类型
        */
        // 装箱:int -> Integer
        Integer I0; // 创建Integer类型实例,并赋值给I
        I0 = new Integer(i0);

        // 拆箱:Integer -> int
        int i1 = I0.intValue();

        /*
         * JDK1.5之后,自动装箱拆箱
         * 即:自动将包装类型转换成基本数据类型
         */
        // 自动装箱
        Integer I1 = i0;
        // 自动拆箱
        int i2 = I1;
    }
}

需要注意的是,关于 Integer,-128 ~ 127 会有缓存,对比这个范围的值的对象是一个坑

package com.joeaaa.demo09;

public class IntegerTrap {
    public static void main(String[] args) {
        Integer n1 = 123;
        Integer n2 = 123;
        Integer n3 = 128;
        Integer n4 = 128;
        System.out.println(n1 == n2); // true
        System.out.println(n3 == n4); // false

        int i1 = 123;
        int i2 = 123;
        System.out.println(i1 == i2); // true
    }
}
  1. 这是JDK在1.5版本中添加的一项新特性,把-128~127的数字缓存起来了,用于提升性能和节省内存。
  2. 这个范围内的自动装箱(相当于调用valueOf(int i)方法)的数字都会从缓存中获取,返回同一个数字。
  3. 但通过new Integer(1)这样就不会从缓存中获取。

source: https://mp.weixin.qq.com/s/PnVkrMzYeOiepPKjl4MKVA