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

Java中的包裝類是什么

 更新時(shí)間:2023年11月01日 14:57:33   作者:Xucc_  
這篇文章主要介紹了Java中的包裝類是什么,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java包裝類是什么

java中的數(shù)據(jù)類型int,double等不是對(duì)象,無法通過向上轉(zhuǎn)型獲取到Object提供的方法,而像String卻可以,只因?yàn)镾tring是一個(gè)對(duì)象而不是一個(gè)類型。

基本數(shù)據(jù)類型由于這樣的特性,導(dǎo)致無法參與轉(zhuǎn)型,泛型,反射等過程。

為了彌補(bǔ)這個(gè)缺陷,java提供了包裝類。

包裝類顧名思義就是將基本的數(shù)據(jù)類型以及一些輔助方法包裝到類中,例如自己實(shí)現(xiàn)一個(gè)int的包裝類:

class IntDemo {
    private int num;
    public IntDemo(int num) {
        this.num = num;
    }
    public int intValue() {
        return this.num;
    }
}

1. Java提供的包裝類

雖然上面的IntDemo類能實(shí)現(xiàn)一些輔助功能,而且可以支持泛型反射等功能,但是如果如果每次使用都自己封裝這么一個(gè)類的話,就太繁瑣了。

所以,java為我們提供了基本數(shù)據(jù)類型的包裝類,這些包裝類分為兩類,一種是對(duì)象型包裝類,不繼承任何其他類(Object的直接子類),另一種是數(shù)值型包裝類,繼承于Number類。

對(duì)象型(Object 的直接子類)包裝類:

// boolean的包裝類
public final class Boolean implements java.io.Serializable,
                                      Comparable<Boolean>

// char的包裝類
public final
class Character implements java.io.Serializable, Comparable<Character>

數(shù)值型(繼承了Number類)包裝類:

// byte的包裝類
public final class Byte extends Number implements Comparable<Byte>

// short的包裝類
public final class Short extends Number implements Comparable<Short> 

// int的包裝類
public final class Integer extends Number implements Comparable<Integer>

// long的包裝類
public final class Long extends Number implements Comparable<Long> 

// float的包裝類
public final class Float extends Number implements Comparable<Float> 

// double的包裝類
public final class Double extends Number implements Comparable<Double> 

Boolean和Character兩個(gè)類就是正常的屬性方法封裝,但是數(shù)值型的包裝類繼承了一個(gè)Number類。

public abstract class Number implements java.io.Serializable

其中定義的方法如下:

Number類的方法

其實(shí)Number中定義的方法就是用于拆箱裝箱的。

2. 拆箱與裝箱

  • 裝箱:

將基本數(shù)據(jù)類型封裝為包裝類對(duì)象,利用每一個(gè)包裝類提供的構(gòu)造方法實(shí)現(xiàn)裝箱操作。

  • 拆箱:

將包裝類中包裝的基本數(shù)據(jù)類型數(shù)據(jù)取出。

// 裝箱
Integer integer1 = new Integer(1);
// 拆箱
int integer2 = integer1.intValue(); 

JDK1.5之后提供自動(dòng)拆裝箱。

// 自動(dòng)裝箱
Integer integer1 = 1;
// 自動(dòng)拆箱
int integer2 = integer1; 

3. 自動(dòng)裝箱的內(nèi)存復(fù)用

自動(dòng)裝箱時(shí),對(duì)于Integer var = ?,如果var指向的對(duì)象在-128 至 127 范圍內(nèi)的賦值時(shí),生成的Integer實(shí)例化對(duì)象是由 IntegerCache.cache() 方法產(chǎn)生,它會(huì)復(fù)用已有對(duì)象。

和String的共享池操作是一個(gè)道理,cache()方法會(huì)將位于-128~127范圍內(nèi)產(chǎn)生的Integer對(duì)象入池,下次使用的時(shí)候,從池中拿去,就不會(huì)在創(chuàng)建了。

所以,在這個(gè)數(shù)值區(qū)間內(nèi)的 Integer對(duì)象的棧指向(屬性名) 可以直接使用==進(jìn)行判斷,因?yàn)橹迪嗤?,指向的就是同一片區(qū)域。

但是這個(gè)區(qū)間之外的所有數(shù)據(jù),自動(dòng)裝箱都會(huì)在堆上產(chǎn)生實(shí)例化,并不再復(fù)用已有對(duì)象,這是一個(gè)大坑,為了避免這個(gè)問題,推薦使用 equals 方法進(jìn)行Integer的判斷。

對(duì)于所有數(shù)值型的包裝類來說,都會(huì)涉及到上面這種問題,一定要多加注意。

而對(duì)于手動(dòng)裝箱,即采用new進(jìn)行包裝類創(chuàng)建時(shí),不會(huì)發(fā)生內(nèi)存復(fù)用,因?yàn)閚ew關(guān)鍵字每次使用,都會(huì)開辟新的空間,這和String采用構(gòu)造方法創(chuàng)建字符串不入池相對(duì)應(yīng)。

4. 包裝類編碼規(guī)約

所有的相同類型的包裝類對(duì)象之間值的比較,全部使用equals()方法。

所有的POJO(簡(jiǎn)單Java類,只包含基本屬性,有參構(gòu)造,get/set)類屬性必須使用包裝類數(shù)據(jù)類型,類屬性即static屬性。

RPC(遠(yuǎn)程方法調(diào)用)方法返回值和參數(shù)必須使用包裝數(shù)據(jù)類型。

推薦所有的局部變量使用基本數(shù)據(jù)類型。

5. 包裝類對(duì)字符串與基本數(shù)據(jù)類型轉(zhuǎn)換的支持

實(shí)際工程中,各種數(shù)據(jù)的接收是通常是通過字符串完成的,所以要掌握包裝類對(duì)字符串轉(zhuǎn)換的方法。

// String->int
public static int parselnt(String s)throws NumberFormatException;

// String->double 
public static double parseDouble(String)throws NumberFormatException;

// String->Boolean 
public static boolean parseBoolean(String s)

字符串轉(zhuǎn)數(shù)值類型時(shí)字符串只能包含數(shù)字,否則會(huì)拋出 NumberFormatException 異常,這是一個(gè)非受查異常。

但是字符串轉(zhuǎn)Boolean是個(gè)特例,parseBoolean()方法會(huì)將”true”轉(zhuǎn)為true,而將非”true”的字符串轉(zhuǎn)為false。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中實(shí)現(xiàn)策略模式的幾種方式小結(jié)

    Spring中實(shí)現(xiàn)策略模式的幾種方式小結(jié)

    在寫業(yè)務(wù)代碼的時(shí)候,難免會(huì)遇到很多if-else,這個(gè)時(shí)候如果if-else不是很多可以用if-else,如果此時(shí)場(chǎng)景過多,太多的if-else會(huì)導(dǎo)致代碼比較臃腫,這個(gè)時(shí)候策略模式就出現(xiàn)了,本文主要闡述工作中常用的實(shí)現(xiàn)策略模式的幾種方式,需要的朋友可以參考下
    2024-05-05
  • Java?中很好用的數(shù)據(jù)結(jié)構(gòu)EnumSet

    Java?中很好用的數(shù)據(jù)結(jié)構(gòu)EnumSet

    這篇文章主要介紹了Java?中很好用的數(shù)據(jù)結(jié)構(gòu)EnumSet,EnumMap即屬于一個(gè)Map,下文圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考參考一下
    2022-05-05
  • java實(shí)戰(zhàn)之桌球小游戲

    java實(shí)戰(zhàn)之桌球小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)戰(zhàn)之桌球小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java 中的 xx ≠ null 是什么新語法

    Java 中的 xx ≠ null 是什么新語法

    Java中null是一個(gè)關(guān)鍵字,用來標(biāo)識(shí)一個(gè)不確定的對(duì)象。因此可以將null賦給引用類型變量,但不可以將null賦給基本類型變量。本文給大家分享Java 中的 xx ≠ null 是什么新語法,感興趣的朋友一起看看吧
    2021-06-06
  • 淺談Java中隨機(jī)數(shù)的幾種實(shí)現(xiàn)方式

    淺談Java中隨機(jī)數(shù)的幾種實(shí)現(xiàn)方式

    這篇文章主要介紹了Java中隨機(jī)數(shù)的幾種實(shí)現(xiàn)方式,從最簡(jiǎn)單的Math.random到多線程的并發(fā)實(shí)現(xiàn)都在本文所列之中,需要的朋友可以參考下
    2015-07-07
  • 修改maven本地倉庫路徑的方法

    修改maven本地倉庫路徑的方法

    本篇文章主要介紹了修改maven本地倉庫路徑的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Spring大白話之三級(jí)緩存如何解決循環(huán)依賴問題

    Spring大白話之三級(jí)緩存如何解決循環(huán)依賴問題

    Spring通過三級(jí)緩存(singletonObjects、earlySingletonObjects、singletonFactories)解決單例循環(huán)依賴,三級(jí)緩存使用Lambda表達(dá)式提前暴露bean的早期引用,確保在遞歸調(diào)用時(shí)能夠正確獲取對(duì)象實(shí)例,避免死循環(huán)
    2025-02-02
  • Spring Boot 項(xiàng)目中使用Swagger2的示例

    Spring Boot 項(xiàng)目中使用Swagger2的示例

    本篇文章主要介紹了Spring Boot 項(xiàng)目中使用Swagger2的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例

    Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例

    這篇文章主要介紹了Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java中的instanceof關(guān)鍵字詳細(xì)解讀

    java中的instanceof關(guān)鍵字詳細(xì)解讀

    這篇文章主要介紹了java中的instanceof關(guān)鍵字詳細(xì)解讀,instanceof 是 Java 的保留關(guān)鍵字,它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型,需要的朋友可以參考下
    2024-01-01

最新評(píng)論