Java中的常用類(2)—八大包裝類、Integer運行原理

一、爲什麼會有八大包裝類

packagepackType.Integer;

public class IntegerTest01{
public static void main(String[]args){

}
public void doSome(Object obj){
System.out.println(obj);
}
}

我現在想要往doSome()中傳查詢入進去一個數字,但是數字屬於基本數據類型,而doSome()方法參數的類型時Object。可見Object方法無法接受基本數據類型的數字。那麼該怎麼辦?

這時候,就需要把基本屬於類型包裝一下了,這時候可以傳一個數字對應的包裝類進去,所以可以這樣寫:

packagepackType.Integer;

public class MyMath{
private int no;

public MyMath(intno){
this.no=no;
}

public MyMath(){
}

public int getNo(){
returnno;
}

public void setNo(intno){
this.no=no;
}

@Override
public String toString(){
return String.valueOf(no);
}
}

結果爲

10

 

但是在實際開發過程中,我們不需要自己寫,SUN公司已經幫我們寫好了。

8中基本數據類型不夠用,所以又提供了包裝類

二、八種包裝類型

基本數據類型

包裝類型

byte

Java.lang.Byte

short

Java.lang.Short

Ing

 

Java.lang.Integer

Long

Java.lang.Long

Float

 

Java.lang.Float

double

Java.lang.Double

boolean

Java.lang.Boolean

Char

Java.lang.Character

 

三、Integer

(1)Integer構造方法

    • Constructor and Description
      Integer(int value)

      構造一個新分配的 Integer對象,該對象表示指定的 int值。

      Integer(String s)

      構造一個新分配 Integer對象,表示 int由指示值 String參數。

       


packagepackType.Number;

public class IntegerTest02{
public static void main(String[]args){
Integer n1=new Integer(100);
System.out.println(n1);
Integer n2=new Integer("123");
System.out.println(n2);
}
}

(2)Integer中的方法

(a)將字符串轉變爲int類型

  • static int
  • parseInt(String s)
  • 將字符串參數解析爲帶符號的十進制整數。

 

	packagepackType.Number;
	
	public class NumberTest06{
	public static void main(String[]args){
	
	int retValue=Integer.parseInt("123");
	System.out.println(retValue+100);
	}
	
	}

//網頁上文本框中輸入的100實際上是“100”字符串,後臺數據庫中要求100數字,此時java程序需要進行轉換。這時候就需要parseInt方法。

 

(b)獲取最大值和最小值

packagepackType.Number;

public class IntegerTest03{
public static void main(String[]args){
System.out.println("int的最大值"+Integer.MAX_VALUE);
System.out.println("int的最小值"+Integer.MIN_VALUE);
}
}

結果爲

int的最大值爲2147483647
int的最小值爲-2147483648

 

 

(3)裝箱和拆箱

 

packagepackType.Number;

public class NumberTest01{
public static void main(String[]args){
//100這個基本數據類型,進行構造方法的包裝達到了:基本數據類型向引用數據類型的轉換
//基本數據類型-->引用數據類型(裝箱)
Integer i =new Integer(100);
//將引用數據類型-->基本數據
float f=i.floatValue();
System.out.println(f);
//將引用數據類型--轉換爲-->基本數類型(拆箱)
intt=i.intValue();
System.out.println(t);
}
}

(3)自動裝箱和自動拆箱

(a)

自動裝箱:基本數據類型自動轉化成包裝類。

自動拆箱:包裝類型自動轉換成基本數據類型。

 

Integer x = 900;
System.out.println(x);

900是基本數據類型

x是包裝類型

基本數據類型--(自動轉換)-->包裝類型:自動裝箱

Int y =x;
System.out.println(y);

x是包裝類型

y是基本數據類型

包裝類型--(自動轉換)-->基本數據類型:自動拆箱

(b)

Integer z = 1000;
System.out.println(z+1);

分析爲什麼沒有報錯?

因爲自動拆箱機制

(c)

Integer a =1000;
Integer b =1000;
System.out.println(a==b);//false

==這個運算符不會自動拆箱

 

(d)

java中爲了提高程序的執行效率,將-128~127之間的所有包裝對象提前創建好了,放到了一個方法區

的“整數型常量池”當中了,目的是隻要用這個區間的數據不需要再new了,直接從整數型常量池當中取出來。

packagepackType.Number;

public class IntegerTest05{
public static void main(String[]args){
Integer a =128;
Integer b =128;
System.out.println(a==b);

Integer x =127;
Integer y =127;
System.out.println(x==y);
Integer x1 = 126;
Integer x2 = 126;
System.out.println(x1==x2);
}
}

結果爲:

false
true
true

 

 四、Integer、int、String的轉換

總結:其實我感覺Integer和String以及引用類型其實是一樣的,唯一的區別就是Integer在方法區有一個整數型常量池,String在方法區有一個字符串型常量池。這些常量池也就是緩存,目的是更快的開發,提高方便率。Integer在方法區的取值範圍爲-128~127.也就是說,如果我兩個Integer變量都是爲127,他們的equals方法是一樣的,因爲他們指向的地址是一樣的,如果超過了這個範圍,也就需要在堆中創建對象,然後對象地址不一樣,自然變量指向對象的地址也就不一樣了。 

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