包裝類 -- 自動拆箱和自動裝箱 -- 享元模式

包裝類

包裝類有哪些

基本數據類型 其對應的包裝類(可以在API文檔中查詢到)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

爲什麼要使用包裝類

基本數據不能調用方法

Integer方法

static Integer valueOf(int i) 返回一個表示指定的 int 值的 Integer 實例。
static Integer valueOf(String s) 返回保存指定的 String 的值的 Integer 對象。
static int parseInt(String s) 將字符串參數作爲有符號的十進制整數進行解析。
Integer(int value)
構造一個新分配的 Integer 對象,它表示指定的 int 值。
Integer(String s)
構造一個新分配的 Integer 對象,它表示 String 參數所指示的 int 值

自動裝箱和自動拆箱

裝箱 : 把一個基本數據類型的數據賦值給一個其對應的包裝類的過程
拆箱 : 把一個包裝類對象賦值給一個其對應的基本數據類型的變量的過程

Integer i = 10; //裝箱 底層還是把10轉換成了 new Integer(10)
int t = new Integer(10); //拆箱

享元模式

享元模式 的時候在[-128,127]

享元模式:當在進行裝箱的值在[-128,127]範圍內時,內存中就不會新開闢空間,堆中會有一個緩存空間,裏面存放着[-128,127]的數,當對象Integer的對象!當採用賦值方式,會先到緩存中查找是否有值緩存着,如果有,直接使用引用地址

public class test03 {
	public static void main(String[] args) {
		Integer i1=128;
		Integer i2=128;
		
		Integer i3 = 10;
		Integer i4 = 10;
		
		Integer i5= new Integer(20); //只要new 一定會在堆裏面開闢空間   == 比較的地址值
		Integer i6=	new Integer(20); 
		
		System.out.println(i1==i2);
		System.out.println(i3==i4);
		System.out.println(i5==i6);
		
		System.out.println("------------------------");
		
		System.out.println(i1.equals(i2));// equals經過覆寫  使用equals比較 比較的是表示的值
		System.out.println(i3.equals(i4));
		System.out.println(i5.equals(i6));
	}
}

結果爲:

false
true
false
------------------------
true
true
true

/*[-128~127]緩存,對象Integer的對象!當採用賦值方式,會先到緩存中查找是否有值緩存着,如果有,直接使用引用地址 */
Integer i1 = 20;
Integer i2 = 20;
System.out.println(i1 == i2);//true此處不存在拆箱比較值,比較的是對象的地址
/但凡是new 都會在堆內存中,創建一個新的對象,對象的地址值不一樣/
Integer i3 = new Integer(20);
Integer i4 = new Integer(20);
System.out.println("i3 == i1 "+(i3 == i1));//false
System.out.println(i3 == i4);//false
/*賦值範圍超過緩存值的範圍,享源模式中沒有緩存值,則會自動創建對象, */
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);
/*上面比較的都是Integer 對象 */
System.out.println(i1.equals(i2));//true
System.out.println(i1.equals(i3));//true
System.out.println(i3.equals(i4));//true
/*在強化,對象比較還是用equalsjava中Integer 已經覆寫了equals */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章