包装类

  • 1.包装类的定义和使用
  • 2.基本类型和包装类的互相转换
  • 3.装箱和拆箱
  • 4.包装类的比较
  • 5.拆箱空指针异常
  • 6.包装类的常见方法



对于

byte,

short,

int,

long,

float,

double,

boolean等基本类型,编程过程中我们常常需要使用到对象,在Java上提供了这些类型的包装类。


Byte,

Short,

Long,

Float,

Double,

Boolean等。

1.包装类的定义和使用

package boxing;

/**
 * [简要描述]:包装类测试
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 09:48
 * @since JDK 1.8
 */
public class BoxingTest {
    public static void main(String[] args) {
        Byte boxByte = 1;
        Short boxShort = 2;
        Integer boxInt = 5;
        Float boxFloat = 50.35f;
        Double boxDouble = 100.22;
        Boolean boxBool = true;

        System.out.println("boxByte = " + boxByte);
        System.out.println("boxShort = " + boxShort);
        System.out.println("boxInt = " + boxInt);
        System.out.println("boxFloat = " + boxFloat);
        System.out.println("boxDouble = " + boxDouble);
        System.out.println("boxBool = " + boxBool);

    }
}

运行结果:

boxByte = 1
boxShort = 2
boxInt = 5
boxFloat = 50.35
boxDouble = 100.22
boxBool = true

2.基本类型和包装类的互相转换

package boxing;

/**
 * [简要描述]:基本类型和包装类的互相转换
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 10:12
 * @since JDK 1.8
 */
public class TansBaseAndBox {
    public static void main(String[] args) {
        int i = 5;
        Integer boxInt = Integer.valueOf(i);//基本类型转换成我装类
        int j = boxInt.intValue();//包装类的值赋值给基础类型

        System.out.println("i = " + i);
        System.out.println("boxInt = " + boxInt);
        System.out.println("j = " + j);
    }
}

运行结果:

i = 5
boxInt = 5
j = 5

3.装箱和拆箱

将基本类型赋值包装类时,编译器可以把基本类型装箱为包装类,这个过程称为自动装箱(Auto Boxing)。将包装类赋值给基本类型或参与计算时,编译器可以把包装类拆箱为基本类型再进行赋值或计算,这个过程称为自动拆箱(Auto Unboxing)

package boxing;

/**
 * [简要描述]:装箱和拆箱
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 10:01
 * @since JDK 1.8
 */
public class AutoBoxing {
    public static void main(String[] args) {
        int i = 10;
        Integer boxInt = i;//编译器会自动把基本类型装箱成包装类(Auto Boxing)

        i = boxInt + 5;//包装类和基本类型进行计算时,编译器会把包装类拆箱成基本类型,再进行计算(Auto Unboxing)

        System.out.println("i = " + i);
        System.out.println("boxInt = " + boxInt);

    }
}

4.包装类的比较

对于包装类的对象进行比较时不能使用 ==,必须使用包装类的equals方法。

package boxing;

/**
 * [简要描述]:包装类的比较
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 10:32
 * @since JDK 1.8
 */
public class BoxCompare {
    public static void main(String[] args) {
        Integer boxInt1 = 100;
        Integer boxInt2 = 100;

        Integer boxInt3 = 600000;
        Integer boxInt4 = 600000;

        System.out.println("boxInt1 == boxInt2 is " + (boxInt1 == boxInt2));
        System.out.println("boxInt3 == boxInt4 is " + (boxInt3 == boxInt4));
        System.out.println("boxInt1.equals(boxInt2) is " + boxInt1.equals(boxInt2));
        System.out.println("boxInt3.equals(boxInt4) is " + (boxInt3.equals(boxInt4)));

    }
}

从上面的例子中可以看到两个整数的包装类的值是一样的但==比较时不一定是true,因为两个包装类可能是不同的对象,之所以用“可能不同”是因为包装类装箱时编译器是有优化的,有些相同值的包装类会使用同一个对象实例,这样可以节省空间。如果两个包装类是使用的同一个实例,那用==比较时会返回true,但我们不能因为存在优化就假设他们是一样的,这样的比较是不安全的。
equals方法中会对两个包装类的值进行比较就能总是得到正确的结果。
因此在比较包装类时一定要用equals方法,而不能用==

5.拆箱空指针异常

包装类即然是类,他的实例对象就可能没有被实例化而是一个null值。
null值的包装类实例被赋值给基本类型时就会出现空指针异常。基本类型是不能被赋值为null的。

package boxing;

/**
 * [简要描述]:空指针异常
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 10:50
 * @since JDK 1.8
 */
public class BoxNullEx {
    public static void main(String[] args) {
        Integer boxInt = null;

        int i;

        i = boxInt;

        System.out.println("boxInt = " + boxInt);
        System.out.println("i = " + i);
    }

}

运行结果:

Exception in thread "main" java.lang.NullPointerException
	at boxing.BoxNullEx.main(BoxNullEx.java:17)

因为boxIntnull,所以i = boxInt;这句代码出现了空指针异常

6.包装类的常见方法

方法名

功能

valueOf

返回值为传入的基本类型的包装类实例

equals

将传入的包装类和当前包装类进行比较相等返回true,否则返回false

toString

将包装类转换成字符串并返回

toHexString

将包装类转换成16进制字符串并返回

byteValue

返回包装类的byte类型值

shortValue

返回包装类的short类型值

intValue

返回包装类的整型值

floatValue

返回包装类的浮点值

doubleValue

返回包装类的double类型值

parseInt

返回参数表示的整数值,默认为10进制,第二个参数为进制数

compareTo

比较当前包装类和参数的大小,相等返回0,小于参数返回-1,大于参数返回1

package boxing;

/**
 * [简要描述]:包装类常用方法
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/4/6 11:03
 * @since JDK 1.8
 */
public class BoxFunction {
    public static void main(String[] args) {
        Integer boxInt = 1000;

        System.out.println("boxInt转换成字符串:" + boxInt.toString());
        System.out.println("1000转换成16制制字符串:" + Integer.toHexString(1000));
        System.out.println("boxInt.compareTo(100):" + boxInt.compareTo(100));

        String str = "100";
        System.out.println("10进制的100转换成整型:" + Integer.parseInt(str));
        System.out.println("8进制的100转换成整型:" + Integer.parseInt(str,8));
        System.out.println("16进制的100转换成整型:" + Integer.parseInt(str,16));


    }
}

运行结果:

boxInt转换成字符串:1000
1000转换成16制制字符串:3e8
boxInt.compareTo(100)1
10进制的100转换成整型:100
8进制的100转换成整型:64
16进制的100转换成整型:256