自動裝箱和拆箱實際上是操作員重載的奇特術語嗎?當我們說Integer i = 10;
時會發生什麼?自動裝箱和拆箱操作員超載
回答
不,它不是運算符重載。 Java不提供任何操作符重載的機制。
Integer i = 10;
好像是說:
Integer i = Integer.valueOf(10);
這是不超載=
可言。
內部編譯生成Integer i=Integer.valueOf(10);
如上所述,這是正確的嗎? Integer.valueOf接受一個字符串並返回一個Integer?我認爲它應該生成Integer i = new Integer(10);在拳擊比賽。 – joshschreuder 2011-02-14 05:25:45
我糾正了,我正在看着舊的Javadocs。 [在更高版本中,這似乎是正確的](http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html#valueOf(int)) – joshschreuder 2011-02-14 05:30:14
Autoboxing/unboxing是一個編譯器功能,所以你不能自己實現它。運算符重載在Java中是不可能的。
這裏是一個很好的例子(類似於你問),關於什麼用原始類型拳擊情況: http://www.leepoint.net/notes-java/data/basic_types/autoboxing.html
沒有,自動裝箱和拆箱是簡單的「語法糖」。這意味着還有額外的計算暗示(需要以字節碼形式發出),但編譯器爲您自己隱藏。
與其他人一樣,auto(un)boxing不是操作符重載。 Java的操作符重載僅限於該語言中定義的內容。因此,例如,每個基元類型(包括對象引用)都有一個=
運算符;邏輯|
和int(按位)|
;等
裝箱和取消裝箱是轉換,大致相同轉換int
到float
。這是關於在應用操作而不是操作員之前調整類型。
它不是操作符重載,但是對於所有實際目的而言,它與組合操作符/方法重載相同。正如在其他答案中指出的那樣,生成的代碼位於調用者而不是被調用者中,就像該方法真正被重載時所做的那樣。
自動裝箱和拆箱是在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
自動裝箱找到細節: 它是轉換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中引入了此功能。
- 1. Java的自動裝箱/拆箱wierdness
- 2. 誰來做自動裝箱/拆箱?
- 3. 解析或自動裝箱或拆箱
- 4. 自動拆箱
- 5. 類別#isAssignable來源和拆箱/裝箱
- 6. 裝箱和拆箱的概念
- 7. C中的裝箱和拆箱#
- 8. 包裝和自動裝箱
- 9. 對CLR中的裝箱和拆箱操作進行了哪些性能改進?
- 10. 如何在自己的課堂中實現裝箱和拆箱?
- 11. 自動裝箱和無效
- 12. 與一般類型和裝箱/拆箱相互作用
- 13. 自動拆箱的對象
- 14. 自動裝箱NSArray?
- 15. Java自動裝箱
- 16. 當使用==爲原始和裝箱值,則自動裝箱完成,或拆箱做
- 17. Scalaz拆箱標籤類型不會自動拆箱
- 18. 包裝自動裝箱
- 19. 自動裝箱在通用,可以自動裝箱工作與對象
- 20. Java手動裝箱VS自動裝箱的原始數字
- 21. 使用採用新的與正常decleration和Integer(裝箱/拆箱)
- 22. 是否強制轉換爲基類,包括裝箱和拆箱
- 23. 裝箱和拆箱,爲什麼輸出都不是「System.Object」?
- 24. 自動裝箱錯誤
- 25. 自動裝箱的基元
- 26. 使用對象在java中自動裝箱拆箱使用對象
- 27. ()操作員超載
- 28. 操作員超載()
- 29. 的Windows集裝箱VS泊塢窗集裝箱和Azure的集裝箱服務/ Kubernetes集羣Linux操作系統
- 30. 拆箱vagrant箱失敗
我不確定這是否正確,不Integer.valueOf()從傳入的字符串返回一個整數? – joshschreuder 2011-02-14 05:25:04