Java基本數據類型與包裝類型(轉)
基本數據類型的包裝類
為什麽需要包裝類?
Java並不是純面向對象的語言。Java語言是一個面向對象的語言,但是Java的基本數據類型卻不是面向對象的。但是我們在實際使用中經常需要將基本數據轉化成對象,便於操作。比如:集合的操作中,這是,我們就需要將基本類型數據轉化為對象。
包裝類均位於java.lang包,使用時不需要導入,系統自動導入。Java中的8個包裝類分別是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它們的使用方式都是一樣的,可以實現原生數據類型與包裝類型的雙向轉換。
包裝類和基本數據類型的對象關系:
基本類型 | 包裝器類型 |
boolean | Boolean |
char | Character |
int | Integer |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
如何使用包裝類?
包裝類的作用:
- 提供:字符串、基本數據類型、對象之間互相轉化的方式!
- 包含每種基本數據類型的相關屬性,如:最大值、最小值等
由於八個包裝類的使用比較類似,下面以最常用的Integer類為例子介紹包裝類的實際使用。Integer類繼承Number父類。
1、實現int和Integer類之間的轉換(該過程中使用了自動裝箱和自動拆箱的原理)
在實際轉換時,使用Integer類的構造方法和Integer類內部的intValue方法實現這些類型之間的相互轉換,實現的代碼如下:
int n = 10; Integer in = new Integer(100); //將int類型轉換為Integer類型 Integer in1 = new Integer(n); //將Integer類型的對象轉換為int類型 int m = in.intValue();
2、Integer類內部的常用方法
在Integer類內部包含了一些和int操作有關的方法,下面介紹一些比較常用的方法:
a、parseInt方法
public static int parseInt(String s)
該方法的作用是將數字字符串轉換為int數值。在以後的界面編程中,將字符串轉換為對應的int數字是一種比較常見的操作。使用示例如下:
String s = “123”; int n = Integer.parseInt(s);
則int變量n的值是123,該方法實際上實現了字符串和int之間的轉換,如果字符串都包含的不是都是數字字符,則程序執行將出現異常。
另外一個parseInt方法:
public static int parseInt(String s, int radix)
則實現將字符串按照參數radix指定的進制轉換為int,使用示例如下:
//將字符串”120”按照十進制轉換為int,則結果為120 int n = Integer.parseInt(“120”,10); //將字符串”12”按照十六進制轉換為int,則結果為18 int n = Integer.parseInt(“12”,16); //將字符串”ff”按照十六進制轉換為int,則結果為255 int n = Integer.parseInt(“ff”,16);
這樣可以實現更靈活的轉換。
b、toString方法
public static String toString(int i)
該方法的作用是將int類型轉換為對應的String類型。
使用示例代碼如下:
int m = 1000; String s = Integer.toString(m); //則字符串s的值是”1000”。
在進行包裝類與基本數據類型之間進行數值之間的轉化時,我們經常使用的自動裝箱和自動拆箱。這是JDK5.0的新增的特性。
自動裝箱和自動拆箱(auto-boxing & auto-unboxing)
JDK5.0的一個新特性是自動裝箱和自動拆箱。
自動裝箱
- 基本類型就自動地封裝到與它相似類型的包裝中,如:Integer i = 100;
- 本質上是,編譯器編譯時自動添加:Integer i = new Integer(100);
自動拆箱
- 包裝類對象自動轉換成基本數據類型。如:int a = new Integer(100);
- 本質是上,編譯器編譯時自動添加:int a = new Integer(100).intValue();
在Integer類中自動裝箱和自動拆箱問題中遇到的問題:
Integer d = 1234; Integer d2 = 1234; System.out.println(d==d2); System.out.println(d.equals(d2)); System.out.println("###################"); Integer d3 = -100; // [-128,127]之間的數,仍然當做基本數據類型來處理。 Integer d4 = -100; System.out.println(d3==d4); System.out.println(d3.equals(d4));
顯示結果:
false true ################### true true
當兩個數都是100的時候==判斷相等,當兩個數都是200的時候判斷不相等。
原因:查看內部實現代碼可知,Integer類有一個緩存問題,它會緩存-128~127之間的整數。也就是說如果將-128~127之間的數值賦值給Integer類對象,在比較兩個對象(d3==d4)時比較的是兩個對象的數值。超過這個範圍比較的是對象的內存地址。
參考:
http://www.mamicode.com/info-detail-1015549.html
http://www.jobui.com/mianshiti/it/java/7088/
http://cakin24.iteye.com/blog/2326545
http://lib.csdn.net/article/javase/2159(以上內容轉自此篇文章)
http://www.cnblogs.com/mengdd/archive/2013/01/21/2869921.html
http://www.jianshu.com/p/5d7c9b077771
http://www.cnblogs.com/huajiezh/p/5225637.html
http://www.cnblogs.com/xianzheng/p/5205968.html
Java基本數據類型與包裝類型(轉)