Java面向?qū)ο笾b類的用途與實(shí)際使用
一、什么是包裝類
包裝類(Wrapper Class): Java是一個(gè)面向?qū)ο蟮木幊陶Z言,但是Java中的八種基本數(shù)據(jù)類型卻是不面向?qū)ο蟮模瑸榱耸褂梅奖愫徒鉀Q這個(gè)不足,在設(shè)計(jì)類時(shí)為每個(gè)基本數(shù)據(jù)類型設(shè)計(jì)了一個(gè)對(duì)應(yīng)的類進(jìn)行代表,這樣八種基本數(shù)據(jù)類型對(duì)應(yīng)的類統(tǒng)稱為包裝類(Wrapper Class),包裝類均位于java.lang包。
二、包裝類的用途
為了使用方便Java中將8中基本數(shù)據(jù)類型進(jìn)行了封裝:除了Integer和Character類以后,其它六個(gè)類的類名和基本數(shù)據(jù)類型一直,只是類名的第一個(gè)字母大寫即可。
boolean —> Boolean
char —> Character
byte—> Byte
short—> Short
long—> Long
int —> Integer
float—> Float
double—> Double
對(duì)于包裝類說,用途主要包含兩種:
a、作為 和基本數(shù)據(jù)類型對(duì)應(yīng)的類 類型存在,方便涉及到對(duì)象的操作。
b、包含每種基本數(shù)據(jù)類型的相關(guān)屬性如最大值、最小值等,以及相關(guān)的操作方法。
三、包裝類的實(shí)際使用(以int和integer為例)
1.int和integer類之間的轉(zhuǎn)換
在實(shí)際轉(zhuǎn)換時(shí),使用Integer類的構(gòu)造方法和Integer類內(nèi)部的intValue方法實(shí)現(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版本以后,就引入了自動(dòng)拆裝箱的語法,也就是在進(jìn)行基本數(shù)據(jù)類型和對(duì)應(yīng)的包裝類轉(zhuǎn)換時(shí),系統(tǒng)將自動(dòng)進(jìn)行,這將大大方便程序員的代碼書寫。
自動(dòng)裝箱:將 基本數(shù)據(jù)類型 封裝為對(duì)象類型,來符合java的面向?qū)ο蟮乃枷搿?/p>
自動(dòng)拆箱:將對(duì)象重新轉(zhuǎn)化為基本數(shù)據(jù)類型。
//5是基本數(shù)據(jù)類型,通過自動(dòng)裝箱變成對(duì)象類型。
//編譯器執(zhí)行了Integer iii = Integer.valueOf(5)
Integer iii=5;
//自動(dòng)拆箱,實(shí)際上執(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)操作。這個(gè)方法就是返回一個(gè) Integer 對(duì)象,只是在返回之前,看作了一個(gè)判斷,判斷當(dāng)前 i 的值是否在 [-128,127] 區(qū)別,且 IntegerCache 中是否存在此對(duì)象,如果存在,則直接返回引用,否則,創(chuàng)建一個(gè)新的對(duì)象。
3.包裝類的緩存值
各個(gè)包裝類緩存值范圍 :
boolean:true和false
byte:-128~127
char:0~127
short:-128~127
int:-128~127
long:-128~127
特別注意:對(duì)于float和double沒有緩存。
在對(duì)上述值進(jìn)行裝箱的時(shí)候(如:Character c1=127;or Integer i= Integer.valueOf(1); 這個(gè)不行哦:Integer i2=new Integer(1);因?yàn)檫@是新建了一個(gè)對(duì)象出來。),并不是創(chuàng)建一個(gè)新對(duì)象而是使用緩存中的對(duì)象,如果超出范圍則需要新建立對(duì)象。
四、常見的面試題
1.Java中Int與Integer的區(qū)別?
一、int 是基本類型,直接存數(shù)值;而integer引用數(shù)據(jù)類型。
二、Int的聲明不需要實(shí)例化,且變量聲明后的初始值為0;Integer的是一個(gè)類,初始值為null,需要進(jìn)行實(shí)例化,才能對(duì)變量數(shù)據(jù)進(jìn)行處理。
三、Integer類是int的包裝類,實(shí)際開發(fā)中Integer被看成一個(gè)對(duì)象,可以進(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() 比較的是兩個(gè)對(duì)象的值(內(nèi)容)是否相同。
"" 比較的是兩個(gè)對(duì)象的引用(內(nèi)存地址)是否相同,也用來比較兩個(gè)基本數(shù)據(jù)類型的變量值是否相等。
java定義:在自動(dòng)裝箱時(shí)對(duì)于值從–128到127之間的值,它們被裝箱為Integer對(duì)象后,會(huì)存在內(nèi)存中被重用,始終只存在一個(gè)對(duì)象而如果超過了從–128到127之間的值,被裝箱后的Integer對(duì)象并不會(huì)被重用,即相當(dāng)于每次裝箱時(shí)都新建一個(gè) Integer對(duì)象;
總結(jié)
到此這篇關(guān)于Java面向?qū)ο笾b類的文章就介紹到這了,更多相關(guān)Java包裝類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot通過HttpSessionListener監(jiān)聽器統(tǒng)計(jì)在線人數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring boot通過HttpSessionListener監(jiān)聽器統(tǒng)計(jì)在線人數(shù)的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Spring Boot啟動(dòng)過程(五)之Springboot內(nèi)嵌Tomcat對(duì)象的start教程詳解
這篇文章主要介紹了Spring Boot啟動(dòng)過程(五)之Springboot內(nèi)嵌Tomcat對(duì)象的start的相關(guān)資料,需要的朋友可以參考下2017-04-04
詳解Java對(duì)象創(chuàng)建的過程及內(nèi)存布局
今天給大家?guī)淼奈恼率荍ava對(duì)象創(chuàng)建的過程及內(nèi)存布局,文中有非常詳細(xì)的圖文示例及介紹,需要的朋友可以參考下2021-06-06
springboot+WebMagic+MyBatis爬蟲框架的使用
本文是對(duì)spring boot+WebMagic+MyBatis做了整合,使用WebMagic爬取數(shù)據(jù),然后通過MyBatis持久化爬取的數(shù)據(jù)到mysql數(shù)據(jù)庫。具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
Java的MyBatis框架中實(shí)現(xiàn)多表連接查詢和查詢結(jié)果分頁
這篇文章主要介紹了Java的MyBatis框架中實(shí)現(xiàn)多表連接查詢和查詢結(jié)果分頁,借助MyBatis框架中帶有的動(dòng)態(tài)SQL查詢功能可以比普通SQL查詢做到更多,需要的朋友可以參考下2016-04-04
springboot熱部署知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于springboot熱部署的知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。2019-06-06
詳解Elasticsearch如何實(shí)現(xiàn)簡(jiǎn)單的腳本排序
Elasticsearch?是位于?Elastic?Stack?核心的分布式搜索和分析引擎,可以為所有類型的數(shù)據(jù)提供近乎實(shí)時(shí)的搜索和分析。本文主要介紹了Elasticsearch如何實(shí)現(xiàn)簡(jiǎn)單的腳本排序,感興趣的可以了解一下2023-01-01
Springboot啟動(dòng)停止命令的.sh腳本編寫方式
這篇文章主要介紹了Springboot啟動(dòng)停止命令的.sh腳本編寫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

