本篇內(nèi)容主要講解“Java基本數(shù)據(jù)類型及包裝類的介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java基本數(shù)據(jù)類型及包裝類的介紹”吧!
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設、網(wǎng)站重做改版、蓮湖網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5高端網(wǎng)站建設、商城建設、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為蓮湖等各大城市提供網(wǎng)站開發(fā)制作服務。關鍵字
位數(shù)、常量池、包裝類(自動裝拆箱)
8種基本數(shù)據(jù)類型
整數(shù)類型:byte,short,int,long
浮點數(shù)類型:float,double
字符類型:char
布爾類型:boolean
位數(shù)
1、JVM規(guī)范中,boolean作為int處理,占4字節(jié) ,boolean數(shù)組當做byte數(shù)組,占1個字節(jié)。
2、byte類型是1byte也就是8位,可以表示的數(shù)字是-128到127,因為還有一個0,加起來一共是256。
包裝類
能解決
1、基本類型并不具備對象的特性: 沒有成員變量,方法可以調(diào)用。
2、不支持面向?qū)ο蟮淖兂蓹C制(不可變),包裝類。Byte,Short,Integer,Long,Double,Float,Charater,Boolean。
JDK1.5,開始提供自動裝箱和拆箱功能,基本類型變量賦給對應的包裝類變量稱之為裝箱。自動拆箱與之相反。
Java 7增強了包裝類的功能,為所有的包裝類提供了一個靜態(tài)的compare(xxx val1,xxx val2)方法,來比較兩個基本類型值得大小。(解決 兩個128自動裝箱后,比較它們的大小并不相等問題)
Java 8再次增強包裝類的功能,可以支持無符號運算。
基本類型和包裝類區(qū)別
1、聲明方式不同:包裝類型需要使用new關鍵字來在堆中分配存儲空間,基本類型不需要。
2、存儲方式及位置不同:基本類型存儲在棧中,而包裝類型是在堆中,然后通過引用來使用。
3、初始值不同:包裝類型的初始值為null,基本類型的初始值 eg:int -> 0,boolean ->false。
4、使用場景不同:常用的集合如Collection、Map時必須使用包裝類(不可變性)。
常量池
好處:
1、節(jié)省內(nèi)存空間
2、提高運行效率
包裝類
Byte,Short,Integer,Long,Character,Boolean 5種 ,在 -128 ~ 127中用到常量池,會自動拆箱裝箱,其余數(shù)字范圍則會新建實例
兩種浮點數(shù)類型的包裝類Float,Double并沒有實現(xiàn)常量池技術
基礎類型
被final修飾時:
如果是成員變量,一定會存入常量池,比如變量b;
如果是局部變量,既不會存入常量池,也不在棧中;
沒有被final修飾時:
不管是成員變量還是局部變量,都不一定會被存入常量池,int類型的變量會以2的15次方為基準,大于等于這個數(shù)就會存入常量池,小于則不會;
但是double類型1d不會,2d會,這個原因也沒找到是為什么;
包裝類常見問題
一.數(shù)值包裝類
/ Integer案例/
Integer i1 = 128;
Integer i2 = 128;
Integer i3 = 127;
Integer i4 = 127;
System.out.println(i1 == i2);//false
System.out.println(i3==i4); //true
/ Long案例/
Long l1 = 128L;
Long l2 = 128L;
Long l3 = -128L;
Long l4 = -128L;
System.out.println(l1 == l2);//false
System.out.println(l3==l4);//true
/Float(Double)案例(形成對比)/
Float f1 = 128f;
Float f2 = 128f;
Float f3 = 127f;
Float f4 = 127f;
System.out.println(f1 == f2);//false
System.out.println(f3==f4);//false
二.原理
因為Byte,Integer,Long對在-128~127之間的數(shù)據(jù)進行了緩存,如果待轉(zhuǎn)換的數(shù)值 i 在該范圍了則直接從緩存取,而不是new Integer(i)。
Float和Double則是每次都new一個新的,沒有緩存機制,所以都為false。
三.JDK源碼:
/Integer的實現(xiàn)/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];//IntegerCache.high為127,取緩存
else
return new Integer(i);
}
/Long的實現(xiàn)/
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
/Float的實現(xiàn)(無緩存)/
public static Float valueOf(float f) {
return new Float(f);
}
到此,相信大家對“Java基本數(shù)據(jù)類型及包裝類的介紹”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。