Java中的包裝類是什么
Java包裝類是什么
java中的數(shù)據(jù)類型int,double等不是對象,無法通過向上轉(zhuǎn)型獲取到Object提供的方法,而像String卻可以,只因?yàn)镾tring是一個(gè)對象而不是一個(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ù)類型的包裝類,這些包裝類分為兩類,一種是對象型包裝類,不繼承任何其他類(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兩個(gè)類就是正常的屬性方法封裝,但是數(shù)值型的包裝類繼承了一個(gè)Number類。
public abstract class Number implements java.io.Serializable
其中定義的方法如下:

其實(shí)Number中定義的方法就是用于拆箱裝箱的。
2. 拆箱與裝箱
- 裝箱:
將基本數(shù)據(jù)類型封裝為包裝類對象,利用每一個(gè)包裝類提供的構(gòu)造方法實(shí)現(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)存復(fù)用
自動裝箱時(shí),對于Integer var = ?,如果var指向的對象在-128 至 127 范圍內(nèi)的賦值時(shí),生成的Integer實(shí)例化對象是由 IntegerCache.cache() 方法產(chǎn)生,它會復(fù)用已有對象。
和String的共享池操作是一個(gè)道理,cache()方法會將位于-128~127范圍內(nèi)產(chǎn)生的Integer對象入池,下次使用的時(shí)候,從池中拿去,就不會在創(chuàng)建了。
所以,在這個(gè)數(shù)值區(qū)間內(nèi)的 Integer對象的棧指向(屬性名) 可以直接使用==進(jìn)行判斷,因?yàn)橹迪嗤赶虻木褪峭黄瑓^(qū)域。
但是這個(gè)區(qū)間之外的所有數(shù)據(jù),自動裝箱都會在堆上產(chǎn)生實(shí)例化,并不再復(fù)用已有對象,這是一個(gè)大坑,為了避免這個(gè)問題,推薦使用 equals 方法進(jìn)行Integer的判斷。
對于所有數(shù)值型的包裝類來說,都會涉及到上面這種問題,一定要多加注意。
而對于手動裝箱,即采用new進(jìn)行包裝類創(chuàng)建時(shí),不會發(fā)生內(nèi)存復(fù)用,因?yàn)閚ew關(guān)鍵字每次使用,都會開辟新的空間,這和String采用構(gòu)造方法創(chuàng)建字符串不入池相對應(yīng)。
4. 包裝類編碼規(guī)約
所有的相同類型的包裝類對象之間值的比較,全部使用equals()方法。
所有的POJO(簡單Java類,只包含基本屬性,有參構(gòu)造,get/set)類屬性必須使用包裝類數(shù)據(jù)類型,類屬性即static屬性。
RPC(遠(yuǎn)程方法調(diào)用)方法返回值和參數(shù)必須使用包裝數(shù)據(jù)類型。
推薦所有的局部變量使用基本數(shù)據(jù)類型。
5. 包裝類對字符串與基本數(shù)據(jù)類型轉(zhuǎn)換的支持
實(shí)際工程中,各種數(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í)字符串只能包含數(shù)字,否則會拋出 NumberFormatException 異常,這是一個(gè)非受查異常。
但是字符串轉(zhuǎn)Boolean是個(gè)特例,parseBoolean()方法會將”true”轉(zhuǎn)為true,而將非”true”的字符串轉(zhuǎn)為false。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot配置多個(gè)請求服務(wù)代理的完整步驟
這篇文章主要給大家介紹了關(guān)于spring boot配置多個(gè)請求服務(wù)代理的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Spring事務(wù)和事務(wù)傳播機(jī)制操作大全
Spring中事務(wù)管理主要分為編程式事務(wù)和聲明式事務(wù),聲明式事務(wù)推薦使用,聲明式事務(wù)通過`@Transactional`注解實(shí)現(xiàn),可以簡化事務(wù)操作,本文給大家介紹Spring事務(wù)和事務(wù)傳播機(jī)制,感興趣的朋友跟隨小編一起看看吧2025-12-12
idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決
這篇文章主要介紹了idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
springboot如何開啟和關(guān)閉kafka消費(fèi)
在Kafka消費(fèi)者中,通過關(guān)閉自動消費(fèi)配置,使用自定義容器工廠,并在消費(fèi)監(jiān)聽器上設(shè)置id,可以手動控制消費(fèi)的開啟和關(guān)閉,這是根據(jù)個(gè)人經(jīng)驗(yàn)總結(jié)的方法,旨在幫助其他開發(fā)者2024-12-12
SpringCloud-Hystrix實(shí)現(xiàn)原理總結(jié)
通過hystrix可以解決雪崩效應(yīng)問題,它提供了資源隔離、降級機(jī)制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實(shí)現(xiàn)原理,感興趣的朋友一起看看吧2021-05-05

