亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文探尋Java裝箱和拆箱的奧妙

 更新時間:2023年04月26日 10:59:44   作者:不一樣的科技宅  
Java中的裝箱(boxing)和拆箱(unboxing)是指將基本數(shù)據(jù)類型與其對應(yīng)的包裝類之間進行轉(zhuǎn)換的過程。本文就來帶大家探索一下Java裝箱和拆箱的奧妙吧

前言

今天在逛某知名論壇的時候,看到一篇"請不要使用包裝類型,避免造成性能損失"的文章。一下子就吸引了我的注意。大意就是,能用基本數(shù)據(jù)類型就盡量用基本數(shù)據(jù)類型,因為包裝類型自動拆箱、裝箱會帶來性能損失尤其是循環(huán)使用時會大量創(chuàng)建對象。所以今天聊一下,Java的裝箱和拆箱。

什么是裝箱和拆箱

Java中的裝箱(boxing)和拆箱(unboxing)是指將基本數(shù)據(jù)類型與其對應(yīng)的包裝類之間進行轉(zhuǎn)換的過程。

裝箱

裝箱是將基本數(shù)據(jù)類型轉(zhuǎn)換為其對應(yīng)的包裝類,例如將int類型轉(zhuǎn)換為Integer類型。這個過程是通過自動裝箱(autoboxing)或手動裝箱(manual boxing)完成的。自動裝箱是指Java編譯器自動將基本類型轉(zhuǎn)換為包裝類型,而手動裝箱則是通過調(diào)用包裝類的構(gòu)造函數(shù)來完成。

拆箱

拆箱是將包裝類轉(zhuǎn)換為其對應(yīng)的基本數(shù)據(jù)類型,例如將Integer類型轉(zhuǎn)換為int類型。這個過程也是通過自動拆箱(autounboxing)或手動拆箱(manual unboxing)完成的。自動拆箱是指Java編譯器自動將包裝類型轉(zhuǎn)換為基本類型,而手動拆箱則是通過調(diào)用包裝類的xxxValue()方法來完成。

為啥要包裝類型

在日常使用的時候,感覺用基本類型還是包裝類型貌似沒啥區(qū)別。如果去掉包裝類型,那就不需要裝箱和拆箱了。也就避免了性能損失。貌似很完美呀。

如果你是這樣想就,大錯特錯了。java中有基本數(shù)據(jù)類型和包裝類型,這是為了滿足不同需求的設(shè)計。java大佬們肯定不會做這樣的無用功的,使用包裝類型的主要原因包括:

  • 對象引用:基本類型不是對象,無法使用對象引用,而包裝類型是對象,可以通過引用來操作。
  • 泛型:泛型不能使用基本數(shù)據(jù)類型,必須使用包裝類型。如,使用List<Integer>來存儲一組整數(shù),而不是使用List<int>。
  • null值:基本類型不能為null,而包裝類型可以為null。
  • 類型轉(zhuǎn)換:包裝類型提供了許多類型轉(zhuǎn)換方法,例如將字符串轉(zhuǎn)換為整數(shù)或浮點數(shù)等,這些方法非常方便。
  • 方法重載:方法重載可以使用不同的參數(shù)類型,但是基本數(shù)據(jù)類型和其對應(yīng)的包裝類型在方法中被認為是不相同的類型,因此可以在方法中使用它們進行重載。

盡管基本數(shù)據(jù)類型在Java中非常有用,但是包裝類型提供了更多的功能和靈活性,因此在某些情況下使用包裝類型會更為方便和實用。所以就有了裝箱和拆箱的過程。

裝箱和拆箱的進化過程

在Java 1.4及之前,裝箱和拆箱需要手動進行,即需要使用對應(yīng)的構(gòu)造函數(shù)或方法來完成。例如,要將int類型的變量x裝箱成Integer類型,可以使用以下代碼:

int x = 10;
Integer y = new Integer(x);  // 手動裝箱

要將Integer類型的變量y拆箱成int類型,可以使用以下代碼:

Integer y = new Integer(10);
int x = y.intValue();  // 手動拆箱

這種方式比較繁瑣,也容易出錯。因此,從Java 5開始,引入了自動裝箱和拆箱機制。這意味著我們可以直接將基本數(shù)據(jù)類型賦值給對應(yīng)的封裝類型變量,或?qū)⒎庋b類型變量賦值給對應(yīng)的基本數(shù)據(jù)類型變量,編譯器會自動完成轉(zhuǎn)換。例如:

int x = 10;
Integer y = x;  // 自動裝箱
int z = y;  // 自動拆箱

從Java 9開始,引入了一種新的裝箱方式,稱為“緊湊型裝箱”(Compact Number Box),它能夠更高效地存儲小范圍內(nèi)的數(shù)值。緊湊型裝箱只適用于byte、short和int類型的封裝類型,這些類型的取值范圍都比較?。ㄈ鏱yte的取值范圍為-128到127),因此可以使用一個byte或short類型的變量來存儲它們的值,而無需使用一個整型變量。

到底該如何選擇呢

基本類型是Java語言的基礎(chǔ),可以直接存儲在棧中,具有較高的執(zhí)行效率和較小的內(nèi)存占用。包裝類型是把基本類型封裝起來的對象,可以在堆中存儲,可以進行各種面向?qū)ο蟮牟僮鳌K栽谶x擇使用基本類型還是包裝類型時,可以考慮以下幾個因素:

  • 執(zhí)行效率:基本類型具有較高的執(zhí)行效率,尤其是在大量計算的情況下,使用基本類型可以明顯提高程序的執(zhí)行速度。
  • 內(nèi)存占用:基本類型在棧中存儲,占用的內(nèi)存較小,而包裝類型在堆中存儲,占用的內(nèi)存較大。
  • 對象操作:如果需要進行面向?qū)ο蟮牟僮?,例如通過equals()方法比較兩個變量的值,或者將基本類型轉(zhuǎn)換為字符串,就需要使用包裝類型。
  • 空值處理:基本類型不能表示空值,而包裝類型可以用null表示空值,因此在需要處理空值的情況下,需要使用包裝類型。

總結(jié)

Java中的裝箱和拆箱技術(shù)經(jīng)歷了從手動到自動、從普通到緊湊型的演進,這使得我們能夠更方便地操作基本數(shù)據(jù)類型和封裝類型之間的轉(zhuǎn)換。雖然更加方便, 但是在實際開發(fā)中,還是需要根據(jù)具體的使用場景進行選擇。

到此這篇關(guān)于一文探尋Java裝箱和拆箱的奧妙的文章就介紹到這了,更多相關(guān)Java裝箱 拆箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中使用spring-retry 解決失敗重試調(diào)用

    SpringBoot中使用spring-retry 解決失敗重試調(diào)用

    本文主要介紹了SpringBoot中使用spring-retry 解決失敗重試調(diào)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java實現(xiàn)字符串和輸入流的相互轉(zhuǎn)換

    Java實現(xiàn)字符串和輸入流的相互轉(zhuǎn)換

    這篇文章主要介紹了Java實現(xiàn)字符串和輸入流的相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • SpringBoot自動裝配原理詳解

    SpringBoot自動裝配原理詳解

    這篇文章主要介紹了SpringBoot自動裝配原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • MyBatis-Plus Sequence主鍵的實現(xiàn)

    MyBatis-Plus Sequence主鍵的實現(xiàn)

    這篇文章主要介紹了MyBatis-Plus Sequence主鍵的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 4種java復(fù)制文件的方式

    4種java復(fù)制文件的方式

    本篇文章列舉了4種最受歡迎的java復(fù)制文件的方式,復(fù)制文件是一個重要的操作,需要的朋友可以參考下
    2015-07-07
  • Java匿名內(nèi)部類原理與用法詳解

    Java匿名內(nèi)部類原理與用法詳解

    這篇文章主要介紹了Java匿名內(nèi)部類原理與用法,結(jié)合實例形式分析了Java匿名內(nèi)部類的概念、原理、應(yīng)用與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Java 線程相關(guān)總結(jié)

    Java 線程相關(guān)總結(jié)

    這篇文章主要介紹了Java 線程的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Java實現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    Java實現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    這篇文章主要介紹了Java實現(xiàn)生成二維碼展示到瀏覽器的示例代碼,要實現(xiàn)在瀏覽器展示二維碼,那么首先需要html文件,通過Java生成二維碼的工具類,在controller層調(diào)用接口,就可以實現(xiàn)在瀏覽器上展示二維碼,需要的朋友可以參考下
    2024-01-01
  • MP(MyBatis-Plus)實現(xiàn)樂觀鎖更新功能的示例代碼

    MP(MyBatis-Plus)實現(xiàn)樂觀鎖更新功能的示例代碼

    這篇文章主要介紹了MP(MyBatis-Plus)實現(xiàn)樂觀鎖更新功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java設(shè)計模式之單例模式Singleton Pattern詳解

    Java設(shè)計模式之單例模式Singleton Pattern詳解

    這篇文章主要介紹了Java設(shè)計模式之單例模式Singleton Pattern詳解,一些常用的工具類、線程池、緩存,數(shù)據(jù)庫,數(shù)據(jù)庫連接池、賬戶登錄系統(tǒng)、配置文件等程序中可能只允許我們創(chuàng)建一個對象,這就需要單例模式,需要的朋友可以參考下
    2023-12-12

最新評論