【问题标题】:How is the plus operator works in case of calculating integer with object?在使用对象计算整数的情况下,加号运算符如何工作?
【发布时间】:2017-03-18 09:47:19
【问题描述】:

伙计们!

当我们将整数与 Integer 对象相加时,运算符 + 如何在 Java 内部实现和工作?

package ru.systemres.ru;

public class Main {
    public static void main(String[] args) {
        Integer iOb = new Integer(10);
        int a = iOb + 5;
        System.out.println(a);

    }
}

是否超载?你能告诉我一些来自 jvm 的源代码吗? 谢谢!

【问题讨论】:

    标签: java oop object integer


    【解决方案1】:

    自动装箱是 Java 编译器在基本类型和它们对应的对象包装类之间进行的自动转换。

    拆箱期间 (Object(Integer) --to--> Primitive(int))

    隐式调用Integer.intValue()返回int值。

    请参考:https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

    【讨论】:

    • 好的,但是它内部是如何一步一步工作的呢?我们是否根据左侧和右侧参数的类型更改 + 运算符逻辑?或者 Integer 对象的行为取决于参数?它是如何工作的?
    • 自动装箱主要发生在两个地方,一个是分配期间,另一个是方法调用期间。在您的情况下,变量存储在原始 int a 中。因此,编译器在这里期待原始类型并将对象转换为 int 以便使用它。 //Internal WorkingInteger obj = Integer.valueOf(10);int pri = obj.intValue();
    【解决方案2】:

    iOb 不只是任何旧对象 - 它是一个Integer。当你在这样的上下文中使用它时,它是outboxed 到一个int,然后进行计算。

    【讨论】:

      【解决方案3】:

      是否超载?你能告诉我一些来自 jvm 的源代码吗 可以用吗?

      它没有被重载,而是 Integer iOb 对象首先被拆箱到 int 然后与 5 一起添加到变量 a

      我建议您参考 here 了解 Java 中的自动装箱和拆箱。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多