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後帥氣小夥,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書部落格: https://www.jianshu.com/u/c785ece603d1
結語
- 下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關注
- 小禮物走一走 or 點贊