標籤:style blog color java 使用 os strong io
裝箱就是把基礎類型封裝成一個類。比如把int封裝成Integer,這時你就不能把他當成一個數了,而是一個類了,對他的操作就需要用它的方法了。
拆箱就是把類轉換成基礎類型。比如你算個加法什麼的是不能用類的,就得把它轉換成基本類型,jdk5以後已經可以自動轉換了貌似。
Integer a=1;//這就是一個自動裝箱,如果沒有自動裝箱的話,需要這樣Integer a=new Integer(1)
int b=a;//這就是一個自動拆箱,如果沒有自動拆箱的話,需要這樣:int b=a.intValue()
這樣就能看出自動裝箱和自動拆箱是簡化了基礎資料型別 (Elementary Data Type)和相對應對象的轉化步驟
1 package first; 2 3 public class TestBoxing { 4 5 public static void main(String[] args) { 6 int a = 5; 7 Integer in = new Integer(7); 8 int b = in;// unBoxing 等價 於int b=in.intValue(); 9 in = a;// boxing 等價 於 in = new Integer(5);10 System.out.println("b=" + b + " in=" + in + " a=" + a);11 }12 13 }
Java中的封裝類 裝箱和拆箱
在java中,資料類型總共可分為兩大種,基礎資料型別 (Elementary Data Type)(實值型別)和類類型(引用資料類型)。基本類型的資料不是對象,不能作為對象調用其toString()、hashCode()、getClass()、equals()等等方法。
所以在java中,針對8種基礎資料型別 (Elementary Data Type),提供了針對每個基礎資料型別 (Elementary Data Type)的封裝類。如下:
INDEX基礎資料型別 (Elementary Data Type)封裝類
1int Integer
2char Character
3float Float
4double Double
5byte Byte
6short Short
7long Long
8boolean Boolean
所謂裝箱,就是把基本類型用它們相對應的參考型別包起來,使它們可以具有對象的特質,如我們可以把int型封裝成Integer類的對象,或者把double封裝成Double,等等。
所謂拆箱,就是跟裝箱的方向相反,將Integer及Double這樣的參考型別的對象重新簡化為實值型別的資料。
//JDK1.5 之前使用手動方式進行裝箱 和拆箱的 操作
public class IntegerDemo
{
public static void main (String []agrs)
{
int i=10;
Integer j=new Integer(i); //手動裝箱操作
int i1=j.intValue();//手動拆箱操作
System.out.println(i1*i1);
}
}; //output:100
//JDK1.5之後可自動進行的裝箱和拆箱的操作,比較方便
public class IntegerDemo02
{
public static void main (String []agrs)
{
int i=10
Integer j=i;
int k=j;
System.out.println(++k);
}
}; //output:11
封裝類的另外一個比較有用的是可以將String 字串類型轉換為相應的基礎資料型別 (Elementary Data Type)。下面以將String轉為int為例:
public class IntegerDemo04
{
public static void main (String[] args)
{
String str="1500";
try
{
int i=Integer.parseInt(str);
System.out.println(++i);
}
catch (Exception e)
{
e.printStackTrace(); //列印異常資訊
}
}
};// output: 1501
如果在上述方法中str="15er00";則在調用parseInt方法時候會產生NumberFormatException異常,見JDK API中對該方法的描述:
public static int parseInt(String s) throws NumberFormatException
將字串參數作為有符號的十進位整數進行解析。除了第一個字元可以是用來表示負值的 ASCII 減號 ‘-‘ (‘\u002D‘) 外,字串中的字元都必須是十進位數字。返回得到的整數值,就好像將該參數和基數 10 作為參數賦予 parseInt(java.lang.String, int) 方法一樣。
參數:
s - 包含要解析的 int 表示形式的 String。
返回:
用十進位參數表示的整數值。
拋出:
NumberFormatException - 如果字串不包含可解析的整數。
總結在封裝類中將String轉換為封裝類所對應的基礎資料型別 (Elementary Data Type)的方法如下,所有的方法都將拋出NumberFormatException異常,需要在調用時候使用try ..catch 進行捕獲
index封裝類返回的基礎資料型別 (Elementary Data Type)方法名
1Integerintstatic int Integer.parseInt(Sting s)
2Charactercharstatic char Character.parseChar(String s)
3Floatfloatstatic float Float.parseFloat(String s)
4Dobuledoublestatic double Double.parseDouble(String s)
5Bytebytestatic byte Byte.parseByte(String s)
6Shortshortstatic short Short.parseShort(String s)
7Longlongstatic long Long.parseLong(String s)
8Booleanbooleanstatic boolean Boolean.parseBoolean(String s)
類似的一個方法為 parseXXX(String s,int radix),對於Integer封裝類,這個radix表示進位. parseInt(String s)預設為十進位。 其他封裝類的radix參數意義,請參見API文檔