包装类--Java开发入门(二十三)

本文介绍了Java中的包装类如Byte, Short, Integer等,涵盖其定义与使用、基本类型与包装类之间的转换、装箱拆箱原理、比较方法以及处理空指针异常。重点讲解了包装类的equals方法和常用实例方法如toString, toHexString等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


对于 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小亮点科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值