Java面向?qū)ο笾b類的用途與實際使用
一、什么是包裝類
包裝類(Wrapper Class): Java是一個面向?qū)ο蟮木幊陶Z言,但是Java中的八種基本數(shù)據(jù)類型卻是不面向?qū)ο蟮?,為了使用方便和解決這個不足,在設(shè)計類時為每個基本數(shù)據(jù)類型設(shè)計了一個對應(yīng)的類進(jìn)行代表,這樣八種基本數(shù)據(jù)類型對應(yīng)的類統(tǒng)稱為包裝類(Wrapper Class),包裝類均位于java.lang包。
二、包裝類的用途
為了使用方便Java中將8中基本數(shù)據(jù)類型進(jìn)行了封裝:除了Integer和Character類以后,其它六個類的類名和基本數(shù)據(jù)類型一直,只是類名的第一個字母大寫即可。
boolean —> Boolean
char —> Character
byte—> Byte
short—> Short
long—> Long
int —> Integer
float—> Float
double—> Double
對于包裝類說,用途主要包含兩種:
a、作為 和基本數(shù)據(jù)類型對應(yīng)的類 類型存在,方便涉及到對象的操作。
b、包含每種基本數(shù)據(jù)類型的相關(guān)屬性如最大值、最小值等,以及相關(guān)的操作方法。
三、包裝類的實際使用(以int和integer為例)
1.int和integer類之間的轉(zhuǎn)換
在實際轉(zhuǎn)換時,使用Integer類的構(gòu)造方法和Integer類內(nèi)部的intValue方法實現(xiàn)這些類型之間的相互轉(zhuǎn)換:
// int n=5; Integer n1=new Integer(n); System.out.println("int類型轉(zhuǎn)換為integer類:"+n1); // Integer i=new Integer(50); int i1 = i.intValue(); System.out.println("integer類轉(zhuǎn)換為int類型:"+i1);
2、Integer類內(nèi)部的常用方法
Integer類的主要方法有:parseInt方法和toString方法。
//parseInt方法: 數(shù)字字符串類型轉(zhuǎn)成int類型 String ss="123"; int ii = Integer.parseInt(ss); System.out.println("字符類型轉(zhuǎn)成整型:"+ii); //toString方法:int類型轉(zhuǎn)成數(shù)字字符串類型 int ii2=123; String ss2 = Integer.toString(ii2); System.out.println("int類型轉(zhuǎn)成數(shù)字字符串類型:"+ss);
JDK自從1.5版本以后,就引入了自動拆裝箱的語法,也就是在進(jìn)行基本數(shù)據(jù)類型和對應(yīng)的包裝類轉(zhuǎn)換時,系統(tǒng)將自動進(jìn)行,這將大大方便程序員的代碼書寫。
自動裝箱:將 基本數(shù)據(jù)類型 封裝為對象類型,來符合java的面向?qū)ο蟮乃枷搿?/p>
自動拆箱:將對象重新轉(zhuǎn)化為基本數(shù)據(jù)類型。
//5是基本數(shù)據(jù)類型,通過自動裝箱變成對象類型。 //編譯器執(zhí)行了Integer iii = Integer.valueOf(5) Integer iii=5; //自動拆箱,實際上執(zhí)行了 int iii2 = iii.intValue() int iii2=iii; System.out.println(iii2);
valueOf()源碼分析:
public static Integer valueOf(int i) { assert IntegerCache.high>= 127; if (i >= IntegerCache.low&& i <= IntegerCache.high) return IntegerCache.cache[i+ (-IntegerCache.low)]; return new Integer(i); }
說明:Integer iii=5;相當(dāng)于編譯器執(zhí)行了Integer iii = Integer.valueOf(5)操作。這個方法就是返回一個 Integer 對象,只是在返回之前,看作了一個判斷,判斷當(dāng)前 i 的值是否在 [-128,127] 區(qū)別,且 IntegerCache 中是否存在此對象,如果存在,則直接返回引用,否則,創(chuàng)建一個新的對象。
3.包裝類的緩存值
各個包裝類緩存值范圍 :
boolean:true和false
byte:-128~127
char:0~127
short:-128~127
int:-128~127
long:-128~127
特別注意:對于float和double沒有緩存。
在對上述值進(jìn)行裝箱的時候(如:Character c1=127;or Integer i= Integer.valueOf(1); 這個不行哦:Integer i2=new Integer(1);因為這是新建了一個對象出來。),并不是創(chuàng)建一個新對象而是使用緩存中的對象,如果超出范圍則需要新建立對象。
四、常見的面試題
1.Java中Int與Integer的區(qū)別?
一、int 是基本類型,直接存數(shù)值;而integer引用數(shù)據(jù)類型。
二、Int的聲明不需要實例化,且變量聲明后的初始值為0;Integer的是一個類,初始值為null,需要進(jìn)行實例化,才能對變量數(shù)據(jù)進(jìn)行處理。
三、Integer類是int的包裝類,實際開發(fā)中Integer被看成一個對象,可以進(jìn)行數(shù)據(jù)轉(zhuǎn)換等操作。
2.判斷下面程序片段輸出的結(jié)果:
Integer num1 = 200; Integer num2 = 200; System.out.println("num1==num2: "+(num1==num2)); Integer num3 = 100; Integer num4 = 100; System.out.println("num3==num4: "+(num3==num4));
輸出結(jié)果:num1num2:false 和num3num4:true
說明:
首先要明確equal方法與的區(qū)別:
equals() 比較的是兩個對象的值(內(nèi)容)是否相同。
"" 比較的是兩個對象的引用(內(nèi)存地址)是否相同,也用來比較兩個基本數(shù)據(jù)類型的變量值是否相等。
java定義:在自動裝箱時對于值從–128到127之間的值,它們被裝箱為Integer對象后,會存在內(nèi)存中被重用,始終只存在一個對象而如果超過了從–128到127之間的值,被裝箱后的Integer對象并不會被重用,即相當(dāng)于每次裝箱時都新建一個 Integer對象;
總結(jié)
到此這篇關(guān)于Java面向?qū)ο笾b類的文章就介紹到這了,更多相關(guān)Java包裝類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot aop 記錄方法執(zhí)行時間代碼示例
這篇文章主要介紹了spring boot aop 記錄方法執(zhí)行時間代碼示例,分享了相關(guān)代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02詳解Spring Boot 部署jar和war的區(qū)別
本篇文章主要介紹了詳解Spring Boot 部署jar和war的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09SpringCloud gateway如何修改返回數(shù)據(jù)
這篇文章主要介紹了SpringCloud gateway如何修改返回數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06