• 为什么要有包装类,顺便说一说基本数据类型、包装类、String类该如何转换?



    一、前言

    • 开门见山,首先看看八种基本数据类型对应的包装类:
    基本数据类型包装类
    charCharacter
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    booleanBoolean

    其中Character 、Boolean的父类是Object,其余的父类是Number


    二、装箱和拆箱

    • 自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5后,Java引入了自动装箱(autoboxing)/拆箱(unboxing)。
    • 自动装箱:在JDK1.5以前,代码 Integer i = 10是错误的,必须要通过Integer i = new Integer(10)这样的语句来实现基本数据类型转换成包装类的过程;而在JDK1.5以后,Java提供了自动装箱的功能,自动装箱过程是通过调用包装类的valueOf()方法实现的,因此只需Integer i = 10这样的语句就能实现基本数据类型转换成包装类,这是因为JVM为我们执行了Integer i = Integer.valueOf(10)这样的操作。
    1. public void test1() {
    2. Integer a = 10;
    3. //等价于 Integer a = Integer.valueOf(10);
    4. }
    • 自动拆箱:每当需要一个值时,对象会自动转成基本数据类型,没必要再去显式调用intValue()doubleValue()等转型方法。自动拆箱过程是通过调用包装类的 xxxValue()方法实现的
    1. public void test1() {
    2. int a = new Integer(10);
    3. //等价于int a = new Integer(10).intValue();
    4. }

    三、空指针异常

    既然知道了装箱和拆箱,那么下面的代码,我们就可以很明白的分析出来为什么会报空指针的异常了:

    1. public void test1() {
    2. Integer a = null;
    3. int b = a;
    4. }


    四、转换的使用

    前面已经讲解了基本数据类型以及包装类之间的相互转换,即自动装箱和拆箱;下面看看基本数据类型与String类之间的转换、String类与包装类之间的转换。

    1、基本数据类型与String类之间的转换

    • 基本数据类型到String类:调用valueOf()
    1. public void test1() {
    2. int a = 3;
    3. String s = String.valueOf(a);
    4. System.out.println(s.getClass());
    5. //class java.lang.String
    6. }

    • String类到基本数据类型:调用parseXxx()
    1. public void test2() {
    2. String s = "12";
    3. int a = Integer.parseInt(s);
    4. }

    2、String类与包装类之间的转换

    • String类到包装类:使用构造器
    1. public void test3() {
    2. String s = "12";
    3. Integer a = new Integer(s);
    4. System.out.println(a.getClass());
    5. //class java.lang.Integer
    6. }
    • 包装类到String类:
    1. public void test4() {
    2. Integer a = new Integer(12);
    3. String s = a.toString();
    4. String s1 = Integer.toString(a);
    5. System.out.println(s.getClass());
    6. System.out.println(s1.getClass());
    7. //class java.lang.String
    8. }
    9. 复制代码

    五、经典面试题

    试着写一写,看看自己会不会:

    1. @Test
    2. public void test5() {
    3. Integer i = new Integer(1);
    4. Integer j = new Integer(1);
    5. System.out.println(i == j);
    6. Integer m = 1;
    7. Integer n = 1;
    8. System.out.println(m == n);
    9. Integer x = 128;
    10. Integer y = 128;
    11. System.out.println(x == y);
    12. }
    13. 复制代码

    输出结果:falsetruefalse


    六、总结

    用一张图片来收尾~

  • 相关阅读:
    可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?
    php校园一卡通系统
    Windows10下yolov5安装测试并训练自己的数据集
    基于C++的配置文件解析器/编码器——toml库
    实战:kubeadm方式搭建k8s集群(containerd)-2022.12.5(成功测试-超详细)【荐】
    Java 获取豆瓣电影TOP250
    【Linux】TCP协议
    美国马萨诸塞大学研究小组联合发现新晶体管潜在材料!
    Windows cmd窗口常用命令
    elementplus下载表格为excel格式
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/126297581