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

詳解Java包裝類及自動裝箱拆箱

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

Java包裝類

基本類型 大小 包裝器類型
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 的包裝類有兩個主要的目的:

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

裝箱和拆箱

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

如:

Integer i = 10;
int index = i;

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

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

其他的也類似,比如Double、Character,不相信的朋友可以自己手動嘗試一下。

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

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

面試問題

下面這段代碼的輸出結(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ū)別:
|類型| == |equals
|–|--|–|
| 基本數(shù)據(jù)類型 | 值 | 不可用
| 包裝類 | 地址 | 內(nèi)容

輸出的結(jié)果為:

true
false

為什么會出現(xiàn)這樣的結(jié)果?輸出結(jié)果表明 i1 和 i2 指向的是同一個對象,而 i3 和 i4 指向的是不同的對象。此時只需一看源碼便知究竟,下面這段代碼是Integer的valueOf方法的具體實現(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段代碼可以看出,在通過valueOf方法創(chuàng)建Integer對象的時候,如果數(shù)值在 [-128,127] 之間,便返回指向IntegerCache.cache中已經(jīng)存在的對象的引用;否則創(chuàng)建一個新的Integer對象。

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

下面這段代碼的輸出結(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);
 }
}

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

false
false

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

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

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

相關(guān)文章

  • 淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

    淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

    這篇文章主要介紹了淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Spring Boot的filter(過濾器)簡單使用實例詳解

    Spring Boot的filter(過濾器)簡單使用實例詳解

    過濾器(Filter)的注冊方法和 Servlet 一樣,有兩種方式:代碼注冊或者注解注冊,下面通過實例給大家介紹Spring Boot的filter(過濾器)簡單使用,一起看看吧
    2017-04-04
  • Java線程池隊列PriorityBlockingQueue和SynchronousQueue詳解

    Java線程池隊列PriorityBlockingQueue和SynchronousQueue詳解

    這篇文章主要為大家介紹了Java線程池隊列PriorityBlockingQueue和SynchronousQueue詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 利用Java代碼寫一個并行調(diào)用模板

    利用Java代碼寫一個并行調(diào)用模板

    這篇文章主要介紹了利用Java代碼寫一個并行調(diào)用模板,文章基于Java的相關(guān)內(nèi)容展開寫一個并行調(diào)用模板的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Java實現(xiàn)阿里云短信接口的示例

    Java實現(xiàn)阿里云短信接口的示例

    這篇文章主要介紹了Java實現(xiàn)阿里云短信接口的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • springmvc配置線程池Executor做多線程并發(fā)操作的代碼實例

    springmvc配置線程池Executor做多線程并發(fā)操作的代碼實例

    今天小編就為大家分享一篇關(guān)于springmvc配置線程池Executor做多線程并發(fā)操作的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解RestTemplate?用法

    詳解RestTemplate?用法

    RestTemplate?是從?Spring3.0?開始支持的一個?HTTP?請求工具,也有的稱之為網(wǎng)絡(luò)框架,說白了就是Java版本的一個postman,這篇文章主要介紹了詳解RestTemplate?用法,需要的朋友可以參考下
    2022-07-07
  • 高可用架構(gòu)etcd選主故障主備秒級切換實現(xiàn)

    高可用架構(gòu)etcd選主故障主備秒級切換實現(xiàn)

    這篇文章主要為大家介紹了高可用架構(gòu)etcd選主故障主備秒級切換的實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯誤:Public Key Retrieval is not allowed的解決方案

    SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯誤:Public Key Retrieva

    最近的項目,突然都從MySQL5.7升級到8.0了,有些項目能運行成功,有些項目遇到了問題,啟動不成功,顯示數(shù)據(jù)庫方面的異常信息,本文給大家介紹了SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯誤:Public Key Retrieval is not allowed的解決方案,需要的朋友可以參考下
    2024-04-04
  • IDEA中設(shè)置Tab健為4個空格的方法

    IDEA中設(shè)置Tab健為4個空格的方法

    這篇文章給大家介紹了代碼縮進用空格還是Tab?(IDEA中設(shè)置Tab健為4個空格)的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-03-03

最新評論