2011-02-14 94 views

回答

6

不,它不是運算符重載。 Java不提供任何操作符重載的機制。

Integer i = 10; 

好像是說:

Integer i = Integer.valueOf(10); 

這是不超載=可言。

+0

我不確定這是否正確,不Integer.valueOf()從傳入的字符串返回一個整數? – joshschreuder 2011-02-14 05:25:04

3

內部編譯生成Integer i=Integer.valueOf(10);

+0

如上所述,這是正確的嗎? Integer.valueOf接受一個字符串並返回一個Integer?我認爲它應該生成Integer i = new Integer(10);在拳擊比賽。 – joshschreuder 2011-02-14 05:25:45

+0

我糾正了,我正在看着舊的Javadocs。 [在更高版本中,這似乎是正確的](http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html#valueOf(int)) – joshschreuder 2011-02-14 05:30:14

2

沒有,自動裝箱和拆箱是簡單的「語法糖」。這意味着還有額外的計算暗示(需要以字節碼形式發出),但編譯器爲您自己隱藏。

0

與其他人一樣,auto(un)boxing不是操作符重載。 Java的操作符重載僅限於該語言中定義的內容。因此,例如,每個基元類型(包括對象引用)都有一個=運算符;邏輯|和int(按位)|;等

0

裝箱和取消裝箱是轉換,大致相同轉換intfloat。這是關於在應用操作而不是操作員之前調整類型。

0

它不是操作符重載,但是對於所有實際目的而言,它與組合操作符/方法重載相同。正如在其他答案中指出的那樣,生成的代碼位於調用者而不是被調用者中,就像該方法真正被重載時所做的那樣。

1

自動裝箱和拆箱是在Java 5中引入Java的。讓我們考慮一個例子來理解這些術語。檢查下面的代碼,並認爲,如果將編譯或不...

int sum(int a, int b) 
{ 
    return a+b; 
} 

Integer I =sum(3,4); 

在上面的例子,如果你會嘗試與Java 1.4或以下,你會看到編譯錯誤編譯它。編譯器會抱怨方法「sum」的返回類型和變量「I」的類型,因爲方法正在返回基本數據類型,其中as Integer是int的包裝類。但是相同的代碼會在java 5中編譯和運行,因爲這種功能稱爲autoboxing。在自動裝箱編譯器中,將原始數據類型轉換爲相應的對象包裝類,例如。詮釋爲整數,字符到字符等 當一個基本類型值是 分配給相應的包裝類的變量Java編譯器適用自動裝箱。 作爲參數傳遞給期望輸入參數爲相應包裝類的方法。

很好用自動裝箱/拆箱的是有與我們定義特定類型(一些包裝類對象)的集合和基本類型數據添加到它泛型。參閱例如

List<Integer> lst=new ArrayList(); 
lst.add(5); 

下面論類似的路徑包裝類型對象轉換成其相應的原語類型被稱爲在Java拆箱。

可以在http://javatechnologyhelper.blogspot.com/2014/07/autoboxing-unboxing-in-java.html

0

自動裝箱找到細節: 它是轉換premitive數據類型來引用數據類型(相對包裝類)的處理。 ex: int x = 5;

Integer ob = new Integer(x);

這裏的'x'(int)是前置的並且被轉換爲引用數據類型(整數)。

我們可以使用創建對象進行自動裝箱。

Integer ob = x;

這裏隱含地編譯器創建一個像上面創建的對象。

Autounboxing:

參照數據類型轉換成premitive數據類型的過程。

int x = 5; 整數OB = X; //自動裝箱

INT X = ob.intValue(); // autounboxing

我們所用autounboxing的步驟與出使用方法的intValue()寫。

int x = ob; // autounboxing。

這裏編譯器隱式調用intValue()方法。

2004年在jdk1.5中引入了此功能。