2017-03-18 23 views
1

夥計!在計算帶有對象的整數時,加號運算符是如何工作的?

如果我們用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的源代碼嗎? 謝謝!

回答

2

自動裝盒是Java編譯器在基元類型和它們相應的對象包裝類之間進行的自動轉換。

在開箱 (對象(整數)--to - >原語(INT))

Integer.intValue()被稱爲返回int值。

請參見:https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

+0

好,但它是如何工作的內部一步一步?根據左側和右側參數的類型,我們是否要更改+運算符邏輯?或者Integer對象的行爲有所不同,具體取決於參數嗎?它是如何工作的? – paus

+1

自動裝箱主要發生在兩個地方,一個是分配期間,另一個是方法調用期間。在你的情況下,變量存儲在基元int a中。所以,編譯器在這裏期待原始類型,並將該對象轉換爲int以便使用它。 '//內部Working' '整數OBJ = Integer.valueOf(10);'' INT PRI = obj.intValue();' – vijayraj34

0

iOb不只是任何舊對象 - 它是一個Integer。當你在這種情況下使用它時,它的outboxedint,然後執行計算。

0

int和Integer是自動裝箱隱藏在源代碼級別的兩種不同類型。 Integer類將對象中的基本類型int的值封裝起來。

int a = iOb + 5;將創建一個基本類型的int。當拆開一個整數時,也可能會拋出一個NPE。

0

它是否過載?你能告訴我一些來自jvm的源代碼,其中 與它合作嗎?

它不過載,而該IntegeriOb對象將取消裝箱到int第一,然後用5加到變量a

我建議你參考here用於Java中的自動裝箱和拆箱。

相關問題