您好,登錄后才能下訂單哦!
本篇內容主要講解“Java基本數據類型及包裝類的介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java基本數據類型及包裝類的介紹”吧!
關鍵字
位數、常量池、包裝類(自動裝拆箱)
8種基本數據類型
整數類型:byte,short,int,long
浮點數類型:float,double
字符類型:char
布爾類型:boolean
位數
1、JVM規范中,boolean作為int處理,占4字節 ,boolean數組當做byte數組,占1個字節。
2、byte類型是1byte也就是8位,可以表示的數字是-128到127,因為還有一個0,加起來一共是256。
包裝類
能解決
1、基本類型并不具備對象的特性: 沒有成員變量,方法可以調用。
2、不支持面向對象的變成機制(不可變),包裝類。Byte,Short,Integer,Long,Double,Float,Charater,Boolean。
JDK1.5,開始提供自動裝箱和拆箱功能,基本類型變量賦給對應的包裝類變量稱之為裝箱。自動拆箱與之相反。
Java 7增強了包裝類的功能,為所有的包裝類提供了一個靜態的compare(xxx val1,xxx val2)方法,來比較兩個基本類型值得大小。(解決 兩個128自動裝箱后,比較它們的大小并不相等問題)
Java 8再次增強包裝類的功能,可以支持無符號運算。
基本類型和包裝類區別
1、聲明方式不同:包裝類型需要使用new關鍵字來在堆中分配存儲空間,基本類型不需要。
2、存儲方式及位置不同:基本類型存儲在棧中,而包裝類型是在堆中,然后通過引用來使用。
3、初始值不同:包裝類型的初始值為null,基本類型的初始值 eg:int -> 0,boolean ->false。
4、使用場景不同:常用的集合如Collection、Map時必須使用包裝類(不可變性)。
常量池
好處:
1、節省內存空間
2、提高運行效率
包裝類
Byte,Short,Integer,Long,Character,Boolean 5種 ,在 -128 ~ 127中用到常量池,會自動拆箱裝箱,其余數字范圍則會新建實例
兩種浮點數類型的包裝類Float,Double并沒有實現常量池技術
基礎類型
被final修飾時:
如果是成員變量,一定會存入常量池,比如變量b;
如果是局部變量,既不會存入常量池,也不在棧中;
沒有被final修飾時:
不管是成員變量還是局部變量,都不一定會被存入常量池,int類型的變量會以2的15次方為基準,大于等于這個數就會存入常量池,小于則不會;
但是double類型1d不會,2d會,這個原因也沒找到是為什么;
包裝類常見問題
一.數值包裝類
/ 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之間的數據進行了緩存,如果待轉換的數值 i 在該范圍了則直接從緩存取,而不是new Integer(i)。
Float和Double則是每次都new一個新的,沒有緩存機制,所以都為false。
三.JDK源碼:
/Integer的實現/
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的實現/
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的實現(無緩存)/
public static Float valueOf(float f) {
return new Float(f);
}
到此,相信大家對“Java基本數據類型及包裝類的介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。