【问题标题】:Return type is not returning as int when we perform unboxing当我们执行拆箱时,返回类型不返回为 int
【发布时间】:2023-04-01 05:03:01
【问题描述】:

我在 Java 中使用自动装箱和拆箱。自动装箱的返回类型很好。没有问题。但是对于拆箱,返回类型是整数而不是整数。请在下面找到我的编码,请告诉我

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

【问题讨论】:

  • 问题是什么?我不确定我是否理解,您似乎已经回答了自己:自动装箱是这里的机制。
  • 你赋值的x是Integer对象,为什么你认为是int
  • 亲爱的你还没有拆箱

标签: java types return autoboxing unboxing


【解决方案1】:

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

要查看该类型是 int,您应该直接打印表达式 x+5 的类型,但您不能这样做,因为它已拆箱为 int,您不能在原始类型。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢老兄。现在我明白了我犯错的地方。谢谢大家
    【解决方案3】:

    您的问题是 Integer x 保留对象引用并且从未分配给原语。

    这应该会给你一个适当的拆箱

    int newX = x + 5;
    

    将包装类型(整数)的对象转换为其对应的 原始(int)值称为拆箱。 Java 编译器适用 当包装类的对象是时拆箱:

    • 作为参数传递给需要 对应的原始类型。
    • 分配给一个变量 对应的原始类型。

    Source

    【讨论】:

      【解决方案4】:

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

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

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

      1. = 右侧的x 被拆箱为int
      2. 5被添加
      3. + 操作的结果再次装箱到Integer 并分配给x

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 2021-08-29
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        相关资源
        最近更新 更多