Java中的基本數據類型沒有方法和屬性,而包裝類就是爲了讓這些擁有方法和屬性,實現對象化交互。數組
數值型包裝類都繼承至Number,而字符型和布爾型繼承至Object。緩存
裝箱:基本數據類型轉換爲包裝類;app
拆箱:包裝類轉換爲基本數據類型。 ide
1 package com.swpu; 2 3 public class WrapperTestOne { 4 public static void main(String[] args){ 5 //1.自動裝箱 6 int t1=1; 7 Integer t2=t1; 8 //2.手動裝箱 9 Integer t3=new Integer(t1); 10 System.out.println("int類型t1="+t1); 11 System.out.println("自動裝箱,Integer類型對象t2="+t2); 12 System.out.println("手動裝箱,Integer類型t3="+t3); 13 14 15 //1.自動拆箱 16 int t4=t2; 17 //2.手動拆箱 18 //經過intValue()方法返回int值,還能夠利用其餘方法裝換爲其餘類型 19 int t5=t2.intValue(); 20 System.out.println("自動拆箱,int型t4="+t4); 21 System.out.println("手動拆箱,int型t5="+t5); 22 } 23 24 }
經過包裝類Integer.toString()將整型轉換爲字符串;spa
經過Integer.parseInt()將字符串轉換爲int類型;code
經過valueOf()方法把字符串轉換爲包裝類而後經過自動拆箱。對象
1 package com.swpu; 2 3 public class WrapperTestTwo { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 //基本數據類型轉換爲字符串 8 int t1=12; 9 String t2=Integer.toString(t1); 10 System.out.println("int轉換爲String:"+t2); 11 //字符串轉換爲基本數據類型 12 //經過paerInt方法 13 int t3=Integer.parseInt(t2); 14 //經過valeOf,先把字符串轉換爲包裝類而後經過自動拆箱 15 int t4=Integer.valueOf(t2); 16 System.out.println("t3:"+t3); 17 System.out.println("t4:"+t4); 18 19 } 20 21 }
包裝類對象的初始值爲null(是一個對象);blog
包裝類對象之間的比較:繼承
1 package com.swpu; 2 3 public class WrapperTestTre { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Integer one=new Integer(100); 8 Integer two=new Integer(100); 9 //one和對two是兩個不一樣的對象,==在比較對象時比較的是內存地址,兩個是不一樣的空間,放的值相同 10 System.out.println("one==two:"+(one==two)); 11 Integer three=100;//自動裝箱 12 /* Integer three=Integer.valueOf(100); 13 * 這時緩存區沒有,就會構造一個 14 */ 15 System.out.println("three==100:"+(three==100));//自動拆箱 16 Integer four=100; 17 /*實際執行的是 Integer four=Integer.valueOf(100); 這時緩存區有,就會直接取 18 * Java爲了提升拆裝箱效率,在執行過程當中提供了一個緩存區(對象池)【相似於常量數組】, 19 * 若是傳入的參數是,-128<參數<127會直接去緩存查找數據,若是有久直接產生,若是沒有就隱式調用new方法產生 20 */ 21 22 System.out.println("three==four:"+(three==four)); 23 Integer five=200; 24 System.out.println("five==200:"+(five==200)); 25 Integer six=200; 26 //注:這裏爲200,超出了緩存區範圍,因此都須要構建 27 System.out.println("five==six:"+(five==six)); 28 /* 29 * 輸出: 30 * one==two:false 31 three==100:true 32 three==four:true 33 five==200:true 34 five==six:false 35 36 */ 37 } 38 39 }
注:three
Java中除了float和double的其餘基本數據類型,都有常量池(注:Python中int【-5~256,257 這個整數對象是區分做用域的,它只有在相同的做用域, 內存地址纔會相同
】,str,byte也有)