91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java基本數據類型及包裝類的介紹

發布時間:2021-09-09 14:50:20 來源:億速云 閱讀:154 作者:chen 欄目:編程語言

本篇內容主要講解“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基本數據類型及包裝類的介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合作市| 新营市| 泰兴市| 宁南县| 博爱县| 榆林市| 高清| 陆丰市| 上思县| 平邑县| 昭苏县| 名山县| 调兵山市| 瓦房店市| 板桥市| 桦甸市| 醴陵市| 叶城县| 曲沃县| 天峨县| 治多县| 楚雄市| 和硕县| 藁城市| 崇礼县| 漠河县| 乌海市| 屏东县| 比如县| 潞西市| 九龙县| 锦屏县| 北流市| 辽阳市| 红桥区| 沐川县| 赣榆县| 兰西县| 遵化市| 攀枝花市| 宁阳县|