欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java包裝類(lèi)及自動(dòng)裝箱拆箱

 更新時(shí)間:2019年03月25日 09:15:49   作者:Kevin_Lyz  
這篇文章主要介紹了Java包裝類(lèi)及自動(dòng)裝箱拆箱,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Java包裝類(lèi)

基本類(lèi)型 大小 包裝器類(lèi)型
boolean / Boolean
char 16bit Boolean
byte 8bit Byte
short /16bit Short
int 32bit Integer
long 64bit Long
float 32bit Float
double 64bit Double
void / Void

Java 的包裝類(lèi)有兩個(gè)主要的目的:

  1. Java包裝類(lèi)將基本數(shù)據(jù)類(lèi)型的值“包裝”到對(duì)象中,對(duì)基本數(shù)據(jù)類(lèi)型的操作變?yōu)榱藢?duì)對(duì)象進(jìn)行操作,從而使基本值能夠包含在為對(duì)象為保留的操作中。比如向Collections中添加元素(泛型的操作限制加入的只能是對(duì)象,比如List = new ArrayList() 的寫(xiě)法是錯(cuò)誤的),或者從帶對(duì)象返回值的方法中返回。
  2. 更加方便類(lèi)型的轉(zhuǎn)換,如常見(jiàn)的Integer向字符的轉(zhuǎn)換

裝箱和拆箱

Java 在SE5之后提供了自動(dòng)的裝箱和拆箱機(jī)制?;緮?shù)據(jù)類(lèi)型可以和與其對(duì)應(yīng)的包裝類(lèi)之間自動(dòng)進(jìn)行轉(zhuǎn)換

如:

Integer i = 10;
int index = i;

裝箱就是自動(dòng)將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為包裝器類(lèi)型
拆箱就是自動(dòng)將包裝器類(lèi)型裝換為基本數(shù)據(jù)類(lèi)型

在裝箱的時(shí)候自動(dòng)調(diào)用的是Integer的valueOf(int)方法。而在拆箱的時(shí)候自動(dòng)調(diào)用的是Integer的intValue方法。

其他的也類(lèi)似,比如Double、Character,不相信的朋友可以自己手動(dòng)嘗試一下。

因此可以用一句話總結(jié)裝箱和拆箱的實(shí)現(xiàn)過(guò)程:

裝箱過(guò)程是通過(guò)調(diào)用包裝器的valueOf方法實(shí)現(xiàn)的,而拆箱過(guò)程是通過(guò)調(diào)用包裝器的xxxValue方法實(shí)現(xiàn)的。(xxx代表對(duì)應(yīng)的基本數(shù)據(jù)類(lèi)型)。

面試問(wèn)題

下面這段代碼的輸出結(jié)果是什么?

public class Main {
 public static void main(String[] args) {
 Integer i1 = 100;
 Integer i2 = 100;
 Integer i3 = 200;
 Integer i4 = 200;
 
 System.out.println(i1==i2);
 System.out.println(i3==i4);
 }
}

注意 ==和equals的區(qū)別:
|類(lèi)型| == |equals
|–|--|–|
| 基本數(shù)據(jù)類(lèi)型 | 值 | 不可用
| 包裝類(lèi) | 地址 | 內(nèi)容

輸出的結(jié)果為:

true
false

為什么會(huì)出現(xiàn)這樣的結(jié)果?輸出結(jié)果表明 i1 和 i2 指向的是同一個(gè)對(duì)象,而 i3 和 i4 指向的是不同的對(duì)象。此時(shí)只需一看源碼便知究竟,下面這段代碼是Integer的valueOf方法的具體實(shí)現(xiàn):

public static Integer valueOf(int i) {
 if(i >= -128 && i <= IntegerCache.high)
  return IntegerCache.cache[i + 128];
 else
  return new Integer(i);
 }

從這2段代碼可以看出,在通過(guò)valueOf方法創(chuàng)建Integer對(duì)象的時(shí)候,如果數(shù)值在 [-128,127] 之間,便返回指向IntegerCache.cache中已經(jīng)存在的對(duì)象的引用;否則創(chuàng)建一個(gè)新的Integer對(duì)象。

上面的代碼中 i1 和 i2 的數(shù)值為100,因此會(huì)直接從cache中取已經(jīng)存在的對(duì)象,所以 i1 和 i2 指向的是同一個(gè)對(duì)象,而 i3 和 i4 則是分別指向不同的對(duì)象。

下面這段代碼的輸出結(jié)果是什么?

public class Main {
 public static void main(String[] args) {
 Double i1 = 100.0;
 Double i2 = 100.0;
 Double i3 = 200.0;
 Double i4 = 200.0;
 
 System.out.println(i1==i2);
 System.out.println(i3==i4);
 }
}

也許有的朋友會(huì)認(rèn)為跟上面一道題目的輸出結(jié)果相同,但是事實(shí)上卻不是。實(shí)際輸出結(jié)果為:

false
false

至于具體為什么,讀者可以去查看Double類(lèi)的valueOf的實(shí)現(xiàn)。
在這里只解釋一下為什么Double類(lèi)的valueOf方法會(huì)采用與Integer類(lèi)的valueOf方法不同的實(shí)現(xiàn)。很簡(jiǎn)單:在某個(gè)范圍內(nèi)的整型數(shù)值的個(gè)數(shù)是有限的,而浮點(diǎn)數(shù)卻不是。

注意,Integer、Short、Byte、Character、Long這幾個(gè)類(lèi)的valueOf方法的實(shí)現(xiàn)是類(lèi)似的,Double、Float的valueOf方法的實(shí)現(xiàn)是類(lèi)似的

以上所述是小編給大家介紹的Java包裝類(lèi)及自動(dòng)裝箱拆箱詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 解決@DateTimeFormat格式化時(shí)間出錯(cuò)問(wèn)題

    解決@DateTimeFormat格式化時(shí)間出錯(cuò)問(wèn)題

    這篇文章主要介紹了解決@DateTimeFormat格式化時(shí)間出錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實(shí)現(xiàn)的自定義迭代器功能示例

    Java實(shí)現(xiàn)的自定義迭代器功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的自定義迭代器功能,結(jié)合具體實(shí)例形式分析了java簡(jiǎn)單迭代器的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 解決httpServletRequest.getParameter獲取不到參數(shù)的問(wèn)題

    解決httpServletRequest.getParameter獲取不到參數(shù)的問(wèn)題

    這篇文章主要介紹了解決httpServletRequest.getParameter獲取不到參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類(lèi)型

    Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類(lèi)型

    這篇文章主要介紹了Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類(lèi)型,Hibernate是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • Java一些常見(jiàn)的出錯(cuò)異常處理方法總結(jié)

    Java一些常見(jiàn)的出錯(cuò)異常處理方法總結(jié)

    下面小編就為大家?guī)?lái)一篇Java一些常見(jiàn)的出錯(cuò)異常處理方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • mybatisplus駝峰命名映射的問(wèn)題解決

    mybatisplus駝峰命名映射的問(wèn)題解決

    本文主要介紹了mybatisplus駝峰命名映射的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解密Java?Map如何高效地操作鍵值對(duì)

    解密Java?Map如何高效地操作鍵值對(duì)

    Map是Java中非常重要的數(shù)據(jù)結(jié)構(gòu)之一,它存儲(chǔ)鍵值對(duì),可以通過(guò)鍵快速查找對(duì)應(yīng)的值,是我們?cè)趯?shí)際開(kāi)發(fā)中使用最為頻繁的數(shù)據(jù)結(jié)構(gòu)之一,下面小編就來(lái)和大家探討一下Map是如何高效地操作鍵值對(duì)的吧
    2023-09-09
  • Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見(jiàn)方式

    Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見(jiàn)方式

    在對(duì)Spring Boot應(yīng)用程序進(jìn)行Docker化時(shí),為應(yīng)用程序選擇正確的基礎(chǔ)鏡像非常重要,下面這篇文章主要給大家介紹了關(guān)于Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見(jiàn)方式,需要的朋友可以參考下
    2023-12-12
  • 2021最新Java?JDK1.8的安裝超詳細(xì)教程

    2021最新Java?JDK1.8的安裝超詳細(xì)教程

    jdk1.8又稱jdk8.0,是目前相對(duì)比較穩(wěn)定的版本,不建議下載最新的jdk版本,因?yàn)樽钚掳娴膉dk不穩(wěn)定,在Java的學(xué)習(xí)中可能會(huì)出現(xiàn)各種各樣的問(wèn)題,今天通過(guò)本文給大家介紹下Java?JDK1.8安裝教程,感興趣的朋友一起看看吧
    2022-04-04
  • 基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    下面小編就為大家?guī)?lái)一篇基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論