Java中int和Integer互转,原理是什么?

关注者
60
被浏览
69,701

22 个回答

这个问题,还是直接看Java官方的文档就行了。

文档里面说:

Autoboxing is the automatic conversion that the Java compiler makes between the primitive types and their corresponding object wrapper classes.
自动装箱(拆箱也是)是 Java编译器 提供的原始类型和它的包装类之间转化的功能。

注意看,自动装箱和拆箱是 Java编译器 的功能,并不是运行时的。


至于编译器如何做到的,文档里面给了例子,以Integer 个int 之间相互转化为例,int 转 Integer:

// 编写的代码
List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(i);
// Java 编译器把上面的代码转换成了下面的样子
List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(Integer.valueOf(i));


反过来,Integer 转 int:

// 编写的代码
public static int sumEven(List<Integer> li) {
    int sum = 0;
    for (Integer i: li)
        if (i % 2 == 0)
            sum += i;
        return sum;
// 编译器把上面的代码转化成了下面的样子
public static int sumEven(List<Integer> li) {
    int sum = 0;
    for (Integer i : li)
        if (i.intValue() % 2 == 0)
            sum += i.intValue();
        return sum;
}


所以简单起来总结就是一句话:

Java中int和Integer互转,原理是Java编译器帮你调用了包装类的valueOf() 和 intValue() 两个方法。

本质上,就是个语法糖。


参考:


最后,欢迎关注我的个人网站: