美文网首页
35、Java的自动装箱和拆箱

35、Java的自动装箱和拆箱

作者: 爱学习的代代 | 来源:发表于2021-05-31 08:52 被阅读0次

1、为什么要使用自动装箱和拆箱?

因为List、Map类操作的对象是Object, 不是基本数据类型,当遇到基本数据类型的时候,需要将基本数据类型封装成对应的类。Java从开始就为基本数据类型提供了封装类。
常见的封装类有:

基本数据类型 封装类
byte Byte
short Short
int Integer
float Float
double Double
long Long
boolean Boolean
char Character
-- String

二、什么是主动装箱和拆箱?

Java 为每种基本数据类型和其封装类之间的转换功能。
自动装箱:从基本数据类型到封装类(autoboxing)
自动拆箱:从封装类到基本数据类型(autounboxing)

package day20;

public class AutoBoxing {
    public static void main(String[] args) {

        int a = 999;
        Integer m = a;

        int c = 999;

        System.out.println(m);
        System.out.println(getType(m));
        System.out.println(c == m);

    }

//  打印类型
    static String getType(Object a) {
        return a.getClass().toString();
    }
}

输出结果:


image.png

三、 自动拆箱、装箱在List、Map中的使用

Map<Integer, String> int2Str = new HashMap<>();
        int2Str.put(1, "壹");
        int2Str.put(2, "贰");
        int2Str.put(3, "叁");


        System.out.println(int2Str.get(1));


        for(int key: int2Str.keySet()) {
            System.out.println(key);
        }

四、 注意事项

注意可能会出现NPE的异常: 因为基本数据类型是没有null的,对应的封装类是可以为null,当封装类自动拆箱成基本数据类型的时候,需要判断是否为null,然后再进行转换。

代码示例:

package day20;

import java.util.HashMap;
import java.util.Map;

public class AutoBoxing {
    public static void main(String[] args) {

        Map<Integer, String> int2Str = new HashMap<>();
        int2Str.put(1, "壹");
        int2Str.put(2, "贰");
        int2Str.put(3, "叁");
        int2Str.put(null, "空");
        

        for(int key: int2Str.keySet()) {
            System.out.println(key);
        }



    }

//  打印类型
    static String getType(Object a) {
        return a.getClass().toString();
    }
}

运行结果:


image.png

五、使用Number类进行数据类型转换

所有和数字相关的封装类都继承自Number,可以使用Number的.xValue方法,获取对应的值。
代码示例如下:

        Number x = 9;

        x = new Integer(99);


        System.out.println(x.longValue());
        System.out.println(x.intValue());
        System.out.println(x.doubleValue());

六、判断是否两个值是否相等?

  1. 基本数据类型使用 ==
  2. 符合数据类型(类的实例)使用equals
    此时需要注意的是字符串对象是有缓存池的,当声明一个字符串A=”xxxx“的时候, 再声明一个字符串B=”xxxx“的时候,默认AB指向的是同一个引用。
    如果要新生成需要用显示的New一个对象出来。

相关文章

网友评论

      本文标题:35、Java的自动装箱和拆箱

      本文链接:https://www.haomeiwen.com/subject/pjuvsltx.html