Java基本數據類型與包裝類型(轉)

基本數據類型的包裝類html

爲何須要包裝類? java

Java並非純面向對象的語言。Java語言是一個面向對象的語言,可是Java的基本數據類型卻不是面向對象的。可是咱們在實際使用中常常須要將基本數據轉化成對象,便於操做。好比:集合的操做中,這是,咱們就須要將基本類型數據轉化爲對象。編程

包裝類均位於java.lang包,使用時不須要導入,系統自動導入。Java中的8個包裝類分別是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它們的使用方式都是同樣的,能夠實現原生數據類型與包裝類型的雙向轉換。緩存

包裝類和基本數據類型的對象關係:ui

基本類型  包裝器類型
boolean Boolean
char Character
int Integer
byte Byte
short Short
long Long
float Float
double Double

如何使用包裝類?spa

包裝類的做用:.net

  • 提供:字符串、基本數據類型、對象之間互相轉化的方式!
  • 包含每種基本數據類型的相關屬性,如:最大值、最小值等

因爲八個包裝類的使用比較相似,下面以最經常使用的Integer類爲例子介紹包裝類的實際使用。Integer類繼承Number父類。code

一、實現int和Integer類之間的轉換(該過程當中使用了自動裝箱和自動拆箱的原理)htm

在實際轉換時,使用Integer類的構造方法和Integer類內部的intValue方法實現這些類型之間的相互轉換,實現的代碼以下:對象

int n = 10;
Integer in = new Integer(100);
//將int類型轉換爲Integer類型
Integer in1 = new Integer(n);
//將Integer類型的對象轉換爲int類型
int m = in.intValue();

二、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

相關文章
相關標籤/搜索