第47節:Java當中的基本型別包裝類

標題圖
Java當中的基本型別包裝類
01
基本資料型別物件的包裝類
什麼是基本資料型別物件包裝類呢?就是把基本資料型別封裝成物件,這樣就可以提供更多的操作基本數值的功能了。
基本資料型別物件的包裝類 8
個:
基本資料型別 | 包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integet |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | character |
java.lang
類 Integer
java.lang.Object -> java.lang.Number -> java.lang.Integer
public final class Integer extends Number implements Comparable<Integer>
Integer
類 是將一個基本型別為 int
的值包裝成為物件的包裝類。
Integer
型別的物件中包含了一個 int
型別的欄位。
基本資料型別物件的包裝類,就是為了提供更多的操作方法,這裡的 Integer
類中 Java
提供了多個方法,而且 Integer
類能夠在 int
型別和 String
型別之間互相進行轉換,還可以處理一些 int
型別有關一些常量和方法等。
一些常量:
常量 | 返回的型別 |
---|---|
MAX_VALUE | static int 為返回的是靜態整數型別,表示為 int 型別的最大值 |
MIN _VALUE | static int 為返回的是靜態整數型別,表示為 int 型別的最小值 |
SIZE | static int 為返回的是靜態整數型別,表示 int 值的位元位數 |
TYPE | static Class<Integer> 表示返回基本型別 Int 的 Class 例項 |
一些構造方法:
方法 | 說明 |
---|---|
Integer(int value) | 構造一個 Integer 物件,表示指定 int 的值 |
Integer(String s) | 構造一個分配的 Integer 物件,表示 String 引數所指的int值 |
方法 | 說明 |
---|---|
decode(String nm) | static Integer 該方法可以將 String 解碼為 Integer |
doubleValue() | 返回為 double 型別 是以 double 型別返回該 Integer 的值 |
equals(Object obj) | 返回 boolean 型別 比較此物件與指定物件 |
floatValue() | 返回 float 型別 以 float 型別返回該 Integer 的值 |
getInteger(String nm) | 返回的是 static Integer ,確定具有指定名稱的系統屬性的整數值 |
getInteger(String nm, int val) | 返回的是 static Integer ,確定具有指定名稱的系統屬性的整數值 |
getInteger(String nm, Integer val) | 返回的是 static Integer ,返回具有指定名稱的系統屬性的整數值 |
hashCode() | 返回此 Integer 的雜湊碼 |
intValue() | 返回 int 型別 以 Int 型別返回給 Integer 的值 |
longValue() | 返回 long 型別 以 long 型別返回該 Integer 的值 |
toBinaryString(int i) | 返回 static String 型別,以二進位制無符號整數形式返回一個整數引數的字串表示形式 |
toHexString(int i) | 返回 static String 型別,以十六進位制無符號整數形式返回一個整數引數的字串表示形式 |
toOctalString(int i) | 返回 static String 型別,以八進位制無符號整數形式返回一個整數引數的字串表示形式 |
toString() | 返回 String 型別,返回一個表示該 Integer 值的 String 物件 |
toString(int i) | 返回型別為 static String ,返回一個表示指定整數的 String 物件 |
toString(int i, int radix) | 返回型別為 static String ,返回用第二個引數指定基數表示的第一個引數的字串形式 |
valueOf(int i) | 返回型別為 static Integer ,返回一個表示指定的 int 值的 Integer 例項 |
valueOf(String s) | 返回型別為 static Integer ,返回一個表示指定的 String 值的 Integer 例項 |
02
基本資料型別物件包裝類:用於基本資料和字串之間的轉換。
parseInt(String s)是將字串引數作為有符號的十進位制整數進行解析。
xxx.parseXxx(string);
注意只有 Character
沒有解析的方法,我們舉個例子: int parseInt(string); -> byte parseByte(string); -> boolean parseBoolean(string);
System.out.println("12"+3); // 結果為123 System.out.println(Integer.parseInt("12")+3); // 結果為 15
parseInt
public static int parseInt(String s) throws NumberFormatException 這個方法是將字串引數作為有符號的十進位制整數進行解析 引數s:包含解析的int表現形式的String。 返回為:帶有符號的十進位制的整數值。 丟擲為NumberFormatException:如果字串不含有可解析的整數。
異常:
System.out.println(Integer.parseInt("a12")+3); // 丟擲為NumberFormatException
System.out.println("a12",6); // 這種方法將其他進位制轉換為別的進位制數
基本數值轉換為字串:
- 12+“ ”;
- String.valueOf(12);
- Integer.toString(int);
基本資料型別轉換為包裝類物件
Integer i = new Integer(2); Integer i2 = new Integer("2"); Integer i3 = Integer.valueOf(2);
包裝類的物件轉換為基本資料型別值
// intValue():為以int型別返回該Integer的值 Integer i = new Integer(2); int num = i.intValue();
基本資料型別包裝類的自動裝箱和拆箱
int i = 3; Integer i = new Integer(3); // 為裝箱 在JDK1.5後,java提供了一個包裝類的新的特性,為自動裝箱。自然有自動拆箱咯~ Integer i = 3; // 這樣表示即為新特性,自動裝箱。 // 一般我們是這樣寫 Integer i = Integer.valueOf(3); // 如今 Integer i = 3; // 系統會為它自動裝箱 i = i + 2; // 此時等於這樣 i = i.intValue() + 2; // 等同於 i = Integer.valueOf(i.intValue() + 2); // 為自動拆箱 i.intValue(),然後再次裝箱即可
Integer包裝類,自動裝箱和自動拆箱的重點
為 JDK1.5
前,沒有新特性
Integer a = new Integer(3); // 為手動裝箱 Integer b = new Integer(3); // 為手動裝箱 System.out.println(a == b); // 結果為:false System.out.println(a.equals(b)); // 結果為:true
自動裝箱和自動拆箱新特性
Integer x = 100; // 自動 Integer y = 100; // 自動 System.out.println(x == y); // 結果為 true System.out.println(x.equals(y)); // 結果為 true
Integer x = 200; // 自動 Integer y = 200; // 自動 System.out.println(x == y); // 結果為 false System.out.println(x.equals(y)); // 結果為 true
Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2); // true Integer integer1 = 128; Integer integer2 = 128; System.out.println(integer1 == integer2); // false
Integer x = 127; Integer y = 127; System.out.println(x==y); // 結果為true System.out.println(x.equals(y)); // 結果為true
Integer x = 128; Integer y = 128; System.out.println( x == y); // 結果為false System.out.println( x.equals(y) ); // 結果為true
因為在 JDK1.5
中, Java
面對在 -128~127
之間的 Integer
的值,用的是原生基本資料型別 int
,會在記憶體中共用,不會再新建立物件空間。就是在這個範圍之間的 Integer
值比較 “==”
,是進行 int
原生資料型別的比較,超出範圍的比較,就會建立新的物件空間。
有人問這究竟是為啥呢?你問我?
這個是 jdk1.5
之後的新特性,規定是數值在 byte
範圍內不會建立新的物件空間,而是用原來的空間,這樣就可以節省記憶體空間了哦~
03
案例
// 一堆字串,定義字串數字的變數 String nums = "12 34 56 23 7 83"; // 字串中數值的排序,定義一個方法為排序所要定義的字串數字的變數,完成任務 nums= sortNumsString(nums); // 列印排序後的字串 System.out.println("nums" + nums);
// 靜態String型別 public static String sortNumsString(String numsString){ // 空格分割 String[] strs = numsString.split(" "); // 字串陣列轉換int陣列,定義了一個方法parseIntArray() int[] nums = parseIntArray(strs); // 對陣列進行排序 Arrays.sort(nums); // 將陣列轉換為字串 return toString(nums); }
// 字串陣列轉換int陣列 private static int[] parseIntArray(String[] strs){ // 定義int陣列 int[] arr = new int[strs.length]; // 遍歷字串陣列 for(int i = 0; i < strs.length; i++){ arr[i] = Integer.parseInt[strs[i]); } return arr; }
// 將陣列轉換為字串 private static String toString(int[] nums){ // 建立StringBuilder物件 StringBuilder sb = new StringBuilder(); // 迴圈新增 for(int i = 0; i < nums.length; i++){ if(i != nums.length-1){ sb.append(nums[i]+" "); }else{ sb.append(nums[i]); } } // 返回sb.toString();方法 return sb.toString(); }
往後餘生,唯獨有你
簡書作者:達叔小生
90後帥氣小夥,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書部落格: ofollow,noindex">https://www.jianshu.com/u/c785ece603d1
結語
- 下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關注
- 小禮物走一走 or 點贊