基本類型的包裝類
Java語言的8種基本類型分别對應8種“包裝類”,每一種包裝類都封裝了一個對應的基本類型成員變量,同時還提供了一些針對該資料類型的實用方法。
包裝類是讓基本資料資料以對象的形式存在和使用。
1、編譯器對包裝類的支援
在JDK5之前,使用包裝類進行運算較繁瑣的“拆箱”和“裝箱”操作:即運算前先包裝類對象所封裝的基本資料類型,運算後在将結果封裝成包裝類對象。
Integer i = Integer.valueOf(100);
Integer i = Integer.valueOf(200);
Integer k = Integer.valueOf(i.intValue()+j.intValue());
JDK5增加了自動“拆箱”和“裝箱”的功能,就簡單多了。
Integer i = 100;
Integer i = 200;
Integer k = i+j;
自動“拆箱”和“裝箱”是編譯器的“預處理”操作。
2、Integer和Double常用方法
Integer.parseInt(obj):轉換為int或者double,無法解析時候抛出 NumberFormatException
Integer.toBinaryString(int);
Integer.toHexString(int);
分别把int轉換成二進制和十六進制的字元串序列。
3、BigDecimal類
Java浮點資料類型(float/double)在運算時會有舍入誤差,如果希望得到精确的計算結果,可以使用java.math.BigDecimal類。
BigDecimal d1 = new BigDecimal("2.5");
BigDecimal d2 = new BigDecimal("3.6");
System.out.println(d1.subtract(d2));//減法
System.out.println(d1.add(d2));//加法
System.out.println(d1.multiply(d2));//乘法
//除法
/*注意:
* 使用除法要使用舍入原則
* 否則當遇到無限小數時,會一直除到溢出,無限下去就溢出。
* 使用BigDecimal.ROUND_HALF_UP 為其四舍五入。
*/
System.out.println(d1.divide(d2, BigDecimal.ROUND_HALF_UP));
當我們對計算精度有嚴格要求時,會使用該類,不過在大多情況下double足夠。
4、BigInteger類
java提供的整數類型(int和long)的儲存範圍有限,當需要進行在更大的整數運算時可以使用這個類,理論上講BigInteger的儲存範圍之受記憶體容量的限制。
同樣也有加減乘除運算。隻不過隻針對整數運算。
BigInteger sum = BigInteger.valueOf(1);
for (int i = 2; i <= 200; i++) {
//multiply參數要求BigInteger,是以i也要轉換為BigInteger
sum = sum.multiply(BigInteger.valueOf(i));
}
System.out.println(sum.toString().length());//結果的長度
System.out.println(sum);
//試試看有多少光年?
sum = sum.divide(BigInteger.valueOf(3600*24*360).multiply(BigInteger.valueOf(300000)));