• 为什么要有包装类,顺便说一说基本数据类型、包装类、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


    六、总结

    用一张图片来收尾~

  • 相关阅读:
    被惊艳到了,4款精美绝伦的黑科技软件,用一次就会爱上
    (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
    智慧校园数字实验室云边协同服务器开发研究
    cesium 实战记录(三)获取鼠标位置总结
    spring事件监听与发布
    论文精读--GPT1
    面向对象-包、权限修饰符、final、常量、枚举、抽象类、接口
    MySQL数据库入门到精通3--进阶篇(存储引擎,索引)
    基于JavaSSM的学生成绩管理APP系统设计与实现
    【数组的使用续篇】
  • 原文地址:https://blog.csdn.net/jcc4261/article/details/127699556