基本型別的外包型別

Java 中每個基本型別都會有專屬的外包型別,如

byte -> Byte
short -> Short
int -> Integer
float -> Float
double -> Double
char -> Character
boolean -> Boolean

這些外包型別有更多的方法可以使用,在 Java SE 5 支援 AutoBoxing 和 Unboxing 可以更直覺的切換

   1:  package Test_AutoBoxing;
   2:   
   3:  public class Test_Boxing 
   4:  {
   5:   
   6:      /**
   7:       * @param args
   8:       */
   9:      public static void main(String[] args) {
  10:          // TODO Auto-generated method stub
  11:   
  12:          //對應的外包類別 
  13:          Byte B = 1; 
  14:          Short S = 2;
  15:          Integer I = 3;
  16:          Long L = 5L;
  17:          Float F = 6.0f;
  18:          Double D = 7.0d;
  19:          Character C = 'c';
  20:          
  21:          /**不支援AutoBoxing的做法(外包型別轉基本型別)*/
  22:          I = new Integer(3);
  23:          int tempi2 = I.intValue();
  24:          
  25:          /**支援 AutoBoxing(可直接設定)*/
  26:          I = 3;
  27:          
  28:          /**基本類型和外包類型轉型*/
  29:          //基本型態
  30:          //小轉大會自動轉型或加上強制轉型也可以
  31:          short s1 = 10;
  32:          double s = s1;//自動轉型
  33:          double ss2 = (double)s1;//強制轉型
  34:          //大轉小須強制轉型,沒有強制轉型會出錯
  35:          double bb = 10.9;
  36:          byte bbb = (byte)bb;//強制轉型
  37:          
  38:          
  39:          //外包型態
  40:          //小轉大可用方法轉型或強制轉型
  41:          Integer I12 = 10;
  42:          Double D12 = I12.doubleValue();//方法轉型
  43:          Double D43 = (double)I12;//強制轉型
  44:          //大轉小只能用方法轉型,不可用強制轉型
  45:          Double d13 = 2.9;
  46:          Short s12 = d13.shortValue();
  47:          
  48:          Integer I123 = 10;
  49:  //        Short S34 = (short)I123;錯誤,大轉小不能用強制轉型
  50:          
  51:          /**使用方法覆載會先找向上轉型再找autoboxing*/
  52:          setNum(I123);//方法2
  53:          
  54:          int tempi = 10;
  55:          setNum(tempi);//方法1
  56:          
  57:          Double ddd = 2.0;
  58:          setNum(ddd);//方法3
  59:          
  60:      }
  61:   
  62:      //方法1
  63:      static void setNum(int tempi)
  64:      {
  65:          System.out.println("方法1");
  66:      }
  67:      //方法2
  68:      static void setNum(Integer tempI)
  69:      {
  70:          System.out.println("方法2");
  71:      }
  72:      //方法3
  73:      static void setNum(double tempd)
  74:      {
  75:          System.out.println("方法3");
  76:      }
  77:      
  78:  }