自動裝箱是 Java 編譯器在基本型別與其對應的包裝類別物件之間的自動轉換,即從 int 到 Integer、double 到 Double 等的轉換。拆箱是從包裝類別物件到其等效基本類型的自動轉換,即:整數轉int。該功能在 Java 1.5 版本中引入。
自動裝箱和拆箱在 Java 中如何運作?
編譯器在內部使用valueOf() 方法將基元轉換為對應的包裝物件(即自動裝箱),反之亦然,它使用intValue()、doubleValue() 等,就像拆箱的範例一樣。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
java中的原始類型和包裝類別映射如下:
Primitive type | Wrapper class |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
範例
讓我們採用一個整數陣列並利用拆箱概念。
import java.util.ArrayList; public class MyClass { public static void main(String args[]) <em>{</em> ArrayList<integer> intlist = new ArrayList<integer>(); //wrapper Integer objects being added here intlist.add(1); interest.add(2); //auto-unboxing is happening here int x = intlist.get(0); System.out.println(x); } }</integer></integer>
因此,在上面的例子中,當給 x 添加值時,我們看到 x 看起來是原始的。因此,當分配完成時,拆箱會自動發生。
public class MyClass { public static void main(String args[]) { Integer sum =0; for(int i=0;i
- 上面,我們展示了這方面的第二個範例,其中呈現了一個典型場景。如果你熟悉Java中的對象創建,你可以看到“Integer sum = 0”聲明了一個對象,當我們在for循環中進行計算時,我們可以看到原始值“i”被添加到包裝“總和”
- 因此,我們可以發現,首先,會發生從包裝器到基元的轉換,因為「+」運算子僅適用於基元;因此,物件拆箱將首先發生。然後,將進行計算,之後將再次進行物件自動裝箱。然後,該值將被指派給變數“sum”。
- 這會給 JVM 帶來不必要的開銷,因為許多中間 Integer 物件將被建立然後銷毀(稍後被垃圾收集),從而導致速度減慢。因此,此類邏輯需謹慎處理。
- 讓我們看看這些情況與一般看法有何不同。為了理解自動裝箱和拆箱,我們將使用一些編碼。
考慮下面的程式碼片段;這會輸出什麼?
public class Main { public static void main(String[] args) { Integer m = 34123; Integer x = 34123; System.out.println(x==m); } }
- 如果你說“真”,那麼你就是“假”,因為輸出也是“假”。由於我們可以比較從 -128 到 127 的整數範圍,因此超出此範圍的值需要拆箱。
- 因此,我們必須比較上述整數的 intValue() 。目前,編譯器使用 valueOf() 屬性來執行此操作。
- 可能,如果這落在上面引用的範圍內,那麼上面的程式碼將給出「true」 - 因為它將首先引用整數文字池進行比較。
public class Main { public static void main(String[] args) { Integer m = 100; Integer x = 100; System.out.println(x==m); } }
這將計算為「true」值,因為文字池中存在 100。
使用方法重載在 Java 中自動裝箱與拆箱
- 在我們用方法重載標記自動裝箱和拆箱之前,我們假設讀者了解方法重載的概念。我們只會提供一些見解,有關更多信息,請參閱 Oracle 的相關文件。
- 方法重載是透過使用相同的方法名稱和不同數量的輸入參數、具有相同名稱的不同資料類型的變數等來呈現任何計算方法的多個變體的過程。
- 讓我們舉個例子來更好地理解它。輸出影像如下所示。
public class Main { public static void main(String[] args) { Overload obj = new Overload(); int i =5; obj.printval(5); Integer m = i; obj.printval(m); } } class Overload { public void printval(int i) { System.out.println("printing the unboxed value "+ i); } public void printval(Integer i) { System.out.println("printing the autoboxed value "+ i); } }
輸出:
- 因此,上述行為明確顯示自動裝箱技術對於重載概念很有用,在編碼時應謹慎使用。
Java 中自動裝箱與拆箱的優點
- 編譯器會自動進行適當的轉換。
- 開發人員編寫更少的程式碼,從而創建更清晰的程式碼。
- 無需手動型別轉換表達式。
結論
我們了解了自動裝箱和拆箱的用例,以及這個概念的隱含性及其優缺點。編碼時必須謹慎使用;否則,它會增加不必要的計算轉換開銷。因此,轉換必須在原語中完成,以避免過多的垃圾收集開銷和臨時物件建立。我們也看到了 Java 中帶有重載概念的自動裝箱的用例。您可以同時檢查更多限制。
以上是Java 中的自動裝箱與拆箱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JVM的工作原理是將Java代碼轉換為機器碼並管理資源。 1)類加載:加載.class文件到內存。 2)運行時數據區:管理內存區域。 3)執行引擎:解釋或編譯執行字節碼。 4)本地方法接口:通過JNI與操作系統交互。

JVM使Java實現跨平台運行。 1)JVM加載、驗證和執行字節碼。 2)JVM的工作包括類加載、字節碼驗證、解釋執行和內存管理。 3)JVM支持高級功能如動態類加載和反射。

Java應用可通過以下步驟在不同操作系統上運行:1)使用File或Paths類處理文件路徑;2)通過System.getenv()設置和獲取環境變量;3)利用Maven或Gradle管理依賴並測試。 Java的跨平台能力依賴於JVM的抽象層,但仍需手動處理某些操作系統特定的功能。

Java在不同平台上需要進行特定配置和調優。 1)調整JVM參數,如-Xms和-Xmx設置堆大小。 2)選擇合適的垃圾回收策略,如ParallelGC或G1GC。 3)配置Native庫以適應不同平台,這些措施能讓Java應用在各種環境中發揮最佳性能。

Osgi,Apachecommonslang,JNA和JvMoptionsareeForhandlingForhandlingPlatform-specificchallengesinjava.1)osgimanagesdeppedendendencenciesandisolatescomponents.2)apachecommonslangprovidesitorityfunctions.3)

JVMmanagesgarbagecollectionacrossplatformseffectivelybyusingagenerationalapproachandadaptingtoOSandhardwaredifferences.ItemploysvariouscollectorslikeSerial,Parallel,CMS,andG1,eachsuitedfordifferentscenarios.Performancecanbetunedwithflagslike-XX:NewRa

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。

Java程序的編譯和執行通過字節碼和JVM實現平台獨立性。 1)編寫Java源碼並編譯成字節碼。 2)使用JVM在任何平台上執行字節碼,確保代碼的跨平台運行。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具