1. 程式人生 > >Java當中的基本型別包裝類

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> 表示返回基本型別IntClass例項

一些構造方法:

方法 說明
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);
// 這種方法將其他進位制轉換為別的進位制數

基本數值轉換為字串:

  1. 12+“ ”;
  2. String.valueOf(12);
  3. 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 點贊