Java 封裝類

來源:互聯網
上載者:User

標籤:for   裝箱   parse   bsp   傳遞參數   種類型   通過   最小   階段   

先說說為什麼會出現封裝類呢?java是一門物件導向的程式設計語言,基本類型並不具有對象的性質,雖然java可以直接處理基本類型,但有時候需要將其作為對象來處理,這就需要將基本類型改為封裝類型。

Java中八種基礎資料型別 (Elementary Data Type)對應的封裝類型。

基礎資料型別 (Elementary Data Type)      封裝類型

byte                    java.lang.Byte

short                   java.lang.Short

int                       java.lang.Integer

long                    java.lang.Long

 

float                    java.lang.Float

double                java.lang.Double

 

boolean              java.lang.Boolean

 

char                   java.lang.Character

先來看看封裝類的繼承關係,如:

 

結合以下代碼來看為什麼Java中會出現封裝類型。

 

//需求:規定m1方法可以接受Java中的任何一種資料類型
public class IntegerTest01{
 public static void  m1(Object o){   
   System.out.println(o);
 }
 public static void main(String[] args){
   //基礎資料型別 (Elementary Data Type)
   byte b=10;
   //引用資料類型
   Byte b1=new Byte(b);
   m1(b1);   //10  Byte已經將Object中的toString方法重寫
 }
}

 

以上代碼定義了一個m1()方法,它的參數類型為Object類,是引用資料類型,m1方法如果想接受byte類型的資料,(byte類型的資料是基礎資料型別 (Elementary Data Type)),可以先將byte類型的資料封裝成java.lang.Byte,再傳遞參數。

 

下面以java.lang.Integer;類型為例,講解八種類型,也就是說這八種類型的方法是通用的。

 

public class IntegerTest02{
 public static void main(String[] args){
   //擷取int類型的最大值和最小值
   System.out.println("int類型的最大值是: "+Integer.MAX_VALUE);
   System.out.println("int類型的最大值是:"+Integer.MIN_VALUE);
   //以int推byte
   System.out.println("byte類型的最大值是:"+Byte.MAX_VALUE);
   System.out.println("byte類型的最大值是:"+Byte.MIN_VALUE);
   //建立integer類型的對象
   Integer i1=new Integer(10);   //將int類型轉換為Integer類型
   Integer i2=new Integer("123");  //將字串類型轉換為Integer類型  (雖然可以將字串類型轉換為Integer類型,但該字串也必須是數字)
    Integer i3=new Integer("abc");    //編譯通過,運行時報異常:NumberFormatException
    System.out.println(i1);
   System.out.println(i2);
 }
}

 

再來看看Integer中常用的方法。

/*
Integer中常用的方法
*/
public class IntegerTest03{
 public static void main(String[] args){
   Integer i1=new Integer(10);  //int類型轉換為Integer類型  基礎資料型別 (Elementary Data Type)轉換為引用資料類型
    System.out.println(i1);     //10
   int i2=i1.intValue();        //Integer類型轉換為int類型
   System.out.println(i2);     //10
   
   //static int parseInt(String s)  String類型轉換為int類型
   int i3=Integer.parseInt("123");
   System.out.println(i3+1);    //124
   //int i4=Integer.parseInt("abc");   //報錯:java.lang.NumberFormatException,String類型轉換為字串,這個字串必須為數字字串
    //System.out.println(i4);
   //static double parseDouble(String s) 
       //String類型轉換為double類型    
   double i5=Double.parseDouble("2234.342");  
   System.out.println(i5+22.23);   //2256.572
   //將int類型的十進位轉換為二進位
   String s1=Integer.toBinaryString(10);   //1010
   System.out.println(s1);
   //將int類型的十進位轉換為八進位
   String s2=Integer.toOctalString(10);    //12
   System.out.println(s2);
   //將int類型的十進位轉換為十六進位
   String s3=Integer.toHexString(10);      //a
   System.out.println(s3);    
   //int--->Integer
   Integer s4=Integer.valueOf(10);
   System.out.println(s4);              //10
   //String--->Integer
   Integer s5=Integer.valueOf("10");
   System.out.println(s5);             //10
 }
}

 

Integer,int,String三種類型相互轉換。

/*
Integer
int 
String
三種類型相互轉換
*/
public class IntegerTest04{
 public static void main(String[] args){
   //int-->Integer
   Integer i1=Integer.valueOf(10);    
   System.out.println(i1);               //10
   //Integer-->int
   int i2=i1.intValue();
   System.out.println(i2);              //10
   //String-->Integer
   Integer i3=Integer.valueOf("21131");
   System.out.println(i3);                //21131
   //Integer-->String
   String i6=Integer.toString(i3);   
   System.out.println(i6);                 //211131
   String i4=i3.toString();
   System.out.println(i4);                //21131
   //String-->int
   int i8=Integer.parseInt("23");
   System.out.println(i8);             //23
   //int-->String
   String i7=10+"";
 }
}

 

有了上面內容的基礎,我們就可以來瞭解一下什麼叫自動拆箱和自動裝箱了。

1.自動裝箱和自動拆箱是程式編譯階段的一個概念,和程式運行無關

2.自動裝箱和自動拆箱的主要目的是方便程式員的調用

 

public class IntegerTest05{
 public static void main(String[] args){
   //JDK5.0之前的版本
   Integer i1=new Integer(10);    //int-->Integer
   int i2=i1.intValue();      //Integer-->int
   //自動裝箱
   Integer i3=10;
   //自動拆箱
   int i4=i3;
   m1(10);       //自動裝箱
 }
 public static void m1(Object o){
   System.out.println(o);
 }
 
}

 

結合以下代碼深入講解一下自動拆箱和自動裝箱。

 

public class IntegerTest06{
 public static void main(String[] args){
   Integer i1=new Integer(10);
   Integer i2=new Integer(10);
   //這裡不會有自動拆箱
   System.out.println(i1==i2);    //false
   //比較兩個Integer類型的資料是否相等,不能用==
   //Integer已經重寫了Object中的toString方法
   System.out.println(i1.equals(i2));   //true
   //注意以下程式
   //如果資料在[-128~127]之間,Java中引入了一個“整型常量池”,在方法區中。
   //該整型常量池只儲存-128~127之間的資料。
   Integer i3=128;
   Integer i4=128;
   //上面的等同於
   //Integer i3=new Integer(128);
   //Integer i4=new Integer(128);
   System.out.println(i3==i4);    //false
   String s1="abc";
   String s2="abc";
   System.out.println(s1==s2);    //true
         Integer i5=127;      //這個程式不會在堆中建立對象,會直接在整型常量池中拿
                Integer i6=127;
               System.out.println(i5==i6);    //true
   Integer i7=-128;
   Integer i8=-128;
   System.out.println(i7==i8);     //true
   Integer i9=-129;
   Integer i10=-129;
   System.out.println(i9==i10);     //false
   }
}

 

Integer i1=new Integer(10);

Integer i2=new Integer(10);

System.out.println(i1==i2);

這裡要注意i1和i2為Integer類型,沒有自動拆箱,因此比較兩個Integer類型的資料是否相等,不能用== ,跟之前講String類型的比較方法是一致的,需要用equals()方法。接下來敲黑板了,如果資料在[-128~127]之間,Java中引入了一個“整型常量池”,在方法區中,該整型常量池只儲存-128~127之間的資料。這就是為什麼Integer i5=127;Integer i6=127;(這兩句等同於Integer i5=new Integer(127);Integer i6=new Integer(127);)System.out.println(i5==i6); 結果為true,而Integer i3=128;Integer i4=128; System.out.println(i3==i4); 結果為false了。相當於前者用“==”比較的是字串,而後者比較的是記憶體位址。

 

Java 封裝類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.