当前位置 博文首页 > 牛家俊:Java 从Character和char的区别来学习自动拆箱装箱

    牛家俊:Java 从Character和char的区别来学习自动拆箱装箱

    作者:牛家俊 时间:2021-01-30 09:33

    本文结构
    1.Character和char 的区别:
    2.自动拆箱装箱

    1.Character和char 的区别:

    Character是类,char基本数据类型.

    在java中有三个类负责对字符的操作:Character、String、StringBuffer。其中Character类是对单个字符进行操作,String是对一个字符序列的操作,StringBuffer是对一串字符进行操作。

    char可以自动包装成Character;Character也可以自动拆包成char。

    java中默认基本类型的数据是分配在栈上,如果你想把它包装成一个类的对象,让它分配在堆上,就需要用到包装类,Character就是char的包装类。

    char可以自动包装成Character;Character也可以自动拆包成char.

    2.自动拆箱和装箱

    每一种基本数据类型,都对应了一个包装类:

    byte——Byte

    int——Integer

    char——Character

    。。。。。

    这些包装类final修饰不能被继承。

    每一个包装类对象,维护了一个对应的基本数据类型的值,且这个对象的值不会变,永远对应。1——Integer(1)

    //装箱
    int a=1;
    Integer integer=new Integer(a);
    //将基本数据类型的值封装到其对应的包装类对象中,叫做装箱。
    
    //拆箱
    int i=integer.intValue();//注意integer同上,都为定义的对象名
    Sout输出为1
    //从包装类对象中,取出其所包装的基本数据类型的值,叫做拆箱。
        
    //自动装箱
    int a=1;
    Integer integer=a;//居然把一个基本类型值赋值给了引用型变量,好矛盾,实际上jvm自动装箱了。
    //Integer integer=new Integer(a);jvm自动补齐了
    
    //自动拆箱
    int b=integer;//居然把地址赋值给了基本类型的变量里
    //int b=integer.intValue();jvm自动补齐了
    
    
    Integer integer1=1;
    Integer integer2=1;
    SOUT(integer1==integer2);//输出的是true
    //不对呀两个对象应该是两个地址呀,这是因为对于数据范围-128~127这个范围的包装类对象,做了缓存,
    //所以俩是一个对象
        
    //注意:虽然有了自动装箱和自动拆箱,但不是在所有的场景下基本数据类型的值与包装类对象都等价
    //第一个场景
    int[] a=new int[100];
    Integer[] b=a;//报错,不行,站在整个数组的角度来看是错误的
    
    a[0]=new Integer(100);//可以,站在单个数组单元来看是可以的
    
    //第二个场景
    //父类方法用int型
    //子类方法用Integer报错