Java筆記 - Wrapper類

包裝類Wrapper

在Java中一切都是對象,爲了方便操作基本數據類型值,所以將基本數據類型也封裝成了對象,每個基本數據類型都有一個與之相對應的類,這些類統稱包裝類(Wrapper Class)。

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

該包裝類主要用於基本數據類型和字符串之間的轉換。
基本數據類型和字符串相互轉換

  1. 基本數據類型—>字符串
    1. 基本數據類型值+”“
    2. String類中的靜態方法static String valueOf(基本數據類型)
    3. 包裝類的靜態方法static String toString(基本數據類型)
  2. 字符串—>基本數據類型
    1. 使用包裝類中的靜態方法 static xxx parseXxx(“xxx類型的字符串”);
      int parseInt(“intstring”);
      long parseLong(“longstring”);
      boolean parseBoolean(“booleanstring”);
      只有Character沒有parse方法
    2. 如果字符串被包裝類(Integer等)進行對象的封裝,可以使用包裝類中另一個非靜態的方法
      xxx xxxValue();將一個包裝類(Integer等)的對象轉成基本數據類型值。
//基本數據類型--->字符串
System.out.println(123+""+1);
System.out.println(String.valueOf(21)+1);
System.out.println(Integer.toString(56)+1);

//字符串--->基本數據類型
System.out.println(Integer.parseInt("123")+1);
Integer in = new Integer("12");
System.out.println(in.intValue()+1);

輸出結果:
1231
211
561
124
13

進制轉換
1. 十進制—>其他進制
Integer類中的靜態方法:
static String toBinayrString(int i):以二進制無符號整數形式返回一個整數參數的字符串表示形式,i - 要轉換爲字符串的整數,返回類型是字符串
static String toOctalString(int i):八進制
static String toHexString(int i):十六進制
static String toString(int i, int radix):radix - 自定義進制
2. 其他進制—>十進制
1. Integer類中的靜態方法:
static int parseInt(String s):將字符串參數作爲有符號的十進制整數進行解析
static in parseInt(String s, int radix):自定義進制,將字符串參數解析爲有符號的整數
2. 使用Integer類中的靜態方法static Integer valueOf(String s, int radix)返回字符串用自定義進制解 析出的Integer對象,然後將這個Integer對象使用toString()方法變成字符串。
//二進制轉十進制
System.out.println(Integer.valueOf(“10”,2).toString()+1);
// 八進制轉成十進制
System.out.println(Integer.valueOf(“125”,8).toString()+1);
//十六進制轉成十進制
System.out.println(Integer.valueOf(“3c”,16).toString()+1);
例:

System.out.println(Integer.toBinaryString(2)+3);
System.out.println(Integer.toHexString(60)+3);
System.out.println(Integer.parseInt("3c",16));
//二進制轉十進制 
System.out.println(Integer.valueOf("10",2).toString()+1);
// 八進制轉成十進制 
System.out.println(Integer.valueOf("125",8).toString()+1);
//十六進制轉成十進制 
System.out.println(Integer.valueOf("3c",16).toString()+1); 

輸出結果:
103
3c3
60
21
851
601

Integer a = new Integer("3");
Integer b = new Integer(3);
System.out.println(a==b);
System.out.println(a.equals(b));

輸出結果:
false//比較的是地址值
true//Integer覆蓋了equals方法,比較的是數值是否相同
一般情況下,==和equals比較的都是地址值,如果使用的是同一個對象的引用,返回true,否則返回false
特殊情況下複寫equals方法比較的是兩個對象的內容是否相同

平時我們可以比較基本數值的大寫,但是當封裝成對象後怎麼進行大小的比較?
可以使用Integer類中的方法int compareTo(Integer anotherInteger);相等返回0,大於參數Integer返回1,小於參數Integer返回-1。(String類比較返回的是在ASCII碼中的差值)

自動裝箱與自動拆箱
JDK1.4版本Integer i = new Integer(4);
JDK1.5版本Integer i = 4;//自動裝箱
Double d = 123.456;
Character c = ‘a’;
Boolean b = false;
i = i +6;//i = new Integer(i.intValue()+6);//i.intValue就是自動拆箱的過程,但是由於Integer是引用型變量,所以有可能Integer指向的地址是null,所以有必要做健壯性判斷

Integer in1 = 127;
Integer in2 = 127;
System.out.println(in1==in2);
System.out.println(in1.equals(in2));
Integer in3 = 128;
Integer in4 = 128;
System.out.println(in3==in4);
System.out.println(in3.equals(in4));

輸出結果:
true
true
false
true

分析:Integer類複寫了equals方法,比較的是內容,內容相同則返回true
引用類型用==判斷的時候只有指向同一個地址才返回true,當自動裝箱的是一個字節(-128~127)的時候,該數據會被共享,每次複製總是指向這個數字的地址值,不會重新開闢空間,所以用==對比的時候返回true

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