当我们执行拆箱时,返回类型不作为int返回

时间:2016-06-29 18:50:10

标签: java types return autoboxing unboxing

我在Java中使用自动装箱和拆箱。 Autoboxing的返回类型很好。没有问题。但是对于拆箱,返回类型将以Integer而不是int形式出现。请在下面找到我的编码,请告诉我

package JavaLearning;

public class NumberLearning {

    public static void main(String[] args) {

        Integer x=5;                                    // AutoBoxing

        System.out.println(x.getClass().getName());     // Display the type with the package name

        System.out.println(x);                          

        x=x+5;                                          // Unboxing

        System.out.println(x.getClass().getName());     // Display the type with the package name

        System.out.println(x);

    }

}

输出:

java.lang.Integer
5
java.lang.Integer
10

4 个答案:

答案 0 :(得分:1)

它以Integer的形式出现,因为您将x+5的结果存储到x Integer,因此再次进行装箱。

要查看该类型是int,您应该直接打印表达式x+5的类型,但是您无法执行此操作,因为它已取消装箱到{{1}并且你不能在基本类型上调用方法。

答案 1 :(得分:1)

变量x声明为Integer。因此,在x = x + 5;行中,它会自动重新装箱。如果您想避免它,请使用int y = x + 5;。但请记住,你不能在原始类型上调用.getClass()

答案 2 :(得分:0)

您的问题是Integer x保留了对象引用,并且永远不会分配给基元。

这应该为您提供正确的拆箱

int newX = x + 5;
  

将包装类型(Integer)的对象转换为其对应的   primitive(int)值称为unboxing。 Java编译器适用   当包装类的对象是:

时取消装箱      
      
  • 作为参数传递给期望值为的方法   相应的原始类型。
  •   
  • 分配给的变量   相应的原始类型。
  •   
     

Source

答案 3 :(得分:0)

首先,变量的类型是固定的。在您的示例中,x的类型为java.lang.Integer,并且无法更改为int

您正在进行的测试无效;除x之外,您永远不会看到java.lang.Integer的类型更改为其他任何内容。

当你x = x + 5;时,会发生很多事情:

  1. x右侧的=已取消装箱至int
  2. 添加了值5
  3. +操作的结果再次装入Integer并分配给x