最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的包裝類是什么

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

Java包裝類是什么

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

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

為了彌補這個缺陷,java提供了包裝類。

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

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

1. Java提供的包裝類

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

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

對象型(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兩個類就是正常的屬性方法封裝,但是數(shù)值型的包裝類繼承了一個Number類。

public abstract class Number implements java.io.Serializable

其中定義的方法如下:

Number類的方法

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

2. 拆箱與裝箱

  • 裝箱:

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

  • 拆箱:

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

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

JDK1.5之后提供自動拆裝箱。

// 自動裝箱
Integer integer1 = 1;
// 自動拆箱
int integer2 = integer1; 

3. 自動裝箱的內(nèi)存復用

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

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

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

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

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

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

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

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

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

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

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

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

實際工程中,各種數(shù)據(jù)的接收是通常是通過字符串完成的,所以要掌握包裝類對字符串轉(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ù)字,否則會拋出 NumberFormatException 異常,這是一個非受查異常。

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

總結(jié)

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

相關文章

  • Go Java算法重復的DNA序列詳解

    Go Java算法重復的DNA序列詳解

    這篇文章主要為大家介紹了Go Java算法之重復的DNA序列的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • spring boot配置多個請求服務代理的完整步驟

    spring boot配置多個請求服務代理的完整步驟

    這篇文章主要給大家介紹了關于spring boot配置多個請求服務代理的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • 聊聊Java的switch為什么不支持long

    聊聊Java的switch為什么不支持long

    這篇文章主要介紹了Java的switch為什么不支持long,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中的CAS和自旋鎖詳解

    Java中的CAS和自旋鎖詳解

    這篇文章主要介紹了Java中的CAS和自旋鎖詳解,CAS算法(Compare And Swap),即比較并替換,是一種實現(xiàn)并發(fā)編程時常用到的算法,Java并發(fā)包中的很多類都使用了CAS算法,需要的朋友可以參考下
    2023-10-10
  • Spring事務和事務傳播機制操作大全

    Spring事務和事務傳播機制操作大全

    Spring中事務管理主要分為編程式事務和聲明式事務,聲明式事務推薦使用,聲明式事務通過`@Transactional`注解實現(xiàn),可以簡化事務操作,本文給大家介紹Spring事務和事務傳播機制,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決

    idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決

    這篇文章主要介紹了idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot如何開啟和關閉kafka消費

    springboot如何開啟和關閉kafka消費

    在Kafka消費者中,通過關閉自動消費配置,使用自定義容器工廠,并在消費監(jiān)聽器上設置id,可以手動控制消費的開啟和關閉,這是根據(jù)個人經(jīng)驗總結(jié)的方法,旨在幫助其他開發(fā)者
    2024-12-12
  • SpringCloud-Hystrix實現(xiàn)原理總結(jié)

    SpringCloud-Hystrix實現(xiàn)原理總結(jié)

    通過hystrix可以解決雪崩效應問題,它提供了資源隔離、降級機制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-05-05
  • 淺析Java基于Socket的文件傳輸案例

    淺析Java基于Socket的文件傳輸案例

    這篇文章主要針對Java基于Socket的文件傳輸案例進行詳細解析,具有一定的參考價值,感興趣的朋友可以參考一下
    2016-02-02
  • Java使用Graphics2D繪制SVG和PNG的方法

    Java使用Graphics2D繪制SVG和PNG的方法

    Java提供了許多圖形處理類和方法,如Graphics2D、AffineTransform、Stroke等,這些都可以用于繪制SVG圖像,Graphics2D是Java中用于繪制2D圖形的類,本文給大家介紹如何使用Graphics2D繪制SVG和PNG,需要的朋友可以參考下
    2023-06-06

最新評論

新乐市| 新蔡县| 桓台县| 福泉市| 永安市| 犍为县| 孟州市| 曲沃县| 周口市| 韩城市| 抚顺县| 颍上县| 桓台县| 通化市| 普洱| 陇南市| 江陵县| 贵南县| 顺昌县| 陆河县| 潞城市| 河池市| 伊宁县| 金堂县| 固镇县| 武穴市| 贵南县| 盖州市| 尤溪县| 仁布县| 杭州市| 成武县| 禄丰县| 电白县| 且末县| 四子王旗| 海淀区| 孝义市| 红桥区| 青河县| 抚州市|