八大基本数据类型对应的八大包装类(含对应面试题解析)

本文已同步到: https://www.bithachi.cn/posts/a852be86.html

1.为什么我们需要包装类?

因为Java是面向对象编程的,那么我们想让基本数据类型可以有对象的特征,调用一些方法,那么Java就提供了包装类,实现基本数据类型转换成包装类,进而使得基本数据类型有了类的特点,可以调用类中的方法。

2. 包装类都有哪些呢?

话不多说,直接上图

image-20200731200506011

3.装箱与拆箱

在我们正式使用包装类之前,我们先了解一下什么是装箱与拆箱。

  1. 装箱:将基本数据类型包装成对应的包装类,比如 int->Integer
  2. 拆箱:将包装类拆解成对应的基本数据类型,比如 Character->char

4. 基本类型、包装类与String之间的转换

现在我们先看看基本类型、包装类与String之间的转换,然后依次代码测试这些转换

image-20200731201544760

5.代码测试

我们以上图的序号依次测试这些转换方式,1->2->3->4->5->6

/**
 * @Program: JavaSE
 * @ClassName: TestMain
 * @Author: Mr.BitHachi
 * @CreateTime: 2020-07-31 20:12
 * @Version: V1.0
 * @Description: 测试基本数据类型、包装类与String之间的转换
 **/

public class TestMain {
    
    
    public static void main(String[] args) {
    
    
        /************  1:基本数据类型->包装类 ************/
        System.out.println("------- 1 -------");
        int i1=100;
        Integer t1=new Integer(i1);//通过构造器
        Float f1=new Float("32.1F");//通过字符串参数
        Character ch1='A';//自动装箱
        System.out.println(t1+","+f1+",ch1");
        
        /************  2.包装类->基本数据类型  ************/
        System.out.println("------- 2 ------");
        int i2=t1.intValue();//调用包装类的方法
        char ch2=ch1;//自动拆箱
        System.out.println(i2+","+ch2);

        /************  3.String类->基本数据类型  ************/
        System.out.println("------- 3 ----------");
        String s3="123";
        int i3=Integer.parseInt(s3);//调用相应的包装类的parseXxx(String)静态方法
        boolean b3=new Boolean("true");//通过包装类的构造器
        System.out.println(i3+","+b3);

        /************  4. 基本数据类型->String类 ************/
        System.out.println("------- 4 ----------");
        String s4=String.valueOf(3.4F);//String的valueOf(x);
        String d4=5.2D+3.4d+"";//String + 自动转换
        System.out.println(s4+","+d4);
        
        /************  5.String类->包装类  ************/
        System.out.println("------- 5 ----------");
        String s5="142.35D";
        Double d5=new Double (s5);//通过字符串参数
        System.out.println(s5);

        /************  6.包装类->String类  ************/
        System.out.println("------- 6 ----------");
        Float f6=123.456f;
        String s6=f6.toString();//对应包装类对象的toString()方法
        String sf=Float.toString(f6);//调用对应包装类的toString(x)方法
        System.out.println(s6+","+sf);
        
    }
}

运行结果:

------- 1 -------
100,32.1,ch1
------- 2 ------
100,A
------- 3 ----------
123,true
------- 4 ----------
3.4,8.6
------- 5 ----------
142.35D
------- 6 ----------
123.456,123.456

6.面试题

public class FaceTest {
    
    
    public static void main(String[] args) {
    
    
        /************  1  ************/
        //比较情况下,编译时将Integer统一编译成Double,与位数多的单位保持一致
        Object o1 = true ? new Integer(1) : new Double(2.0);
        System.out.println(o1);//1.0


        /************  2  ************/
        //这里没有比较,只有条件判断
        Object o2;
        if (true)
            o2 = new Integer(1);
        else
            o2 = new Double(2.0);
        System.out.println(o2);//1

        /************  3  ************/
        //Integer内部定义了IntegerCache类结构,IntegerCache中定义了 Integer[],
        //保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
        //- 128~127范围内时,可以直接使用数组中的元素,不用再去new了.目的:提高效率
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);//false
        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n);//true
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);//false
    }
}

运行结果:

1.0
1
false
true
false

猜你喜欢

转载自blog.csdn.net/weixin_43914604/article/details/106772777