可變參數、自動裝箱與自動拆箱

一、可變參數:
1、需求: 定義一個函數做加法功能(函數做幾個數據的加法功能是不確定)。
方式一:函數重載,但是隻要多一個參數就要重寫一次方法,太麻煩。
方式二:數組

方式三:可變參數

2、可變參數的格式:
數據類型… 變量名

3、可變參數要注意的細節:
1)如果一個函數的形參使用上了可變參數之後,那麼調用該方法的時候可以傳遞參數也可以不傳遞參數。
2)可變參數實際上是一個數組對象。

3)可變參數必須位於形參中的最後一個參數。
4)一個函數最多隻能有一個可變參數,因爲可變參數要位於形參中最後一個位置上。

二、自動裝箱與自動拆箱
1、java是面向對象 的語言,任何事物都可以使用類進行描述,sun就使用了一些類描述java中八種基本數據類型數據。

基本數據類型        包裝類型
  byte            Byte
  short           Short
  int             Integer
  long            Long 

  float           Float
  double          Double 

  boolean         Boolean 

  char            Character

2、基本數據類型數據有了對應的包裝類型的好處:

public class Demo7 {

    public static void main(String[] args) {
        String str = "12";

        //字符串轉換成int類型數據。 可以把字符串轉換成對應的數字
        int i = Integer.parseInt(str);
        System.out.println(i+1);

        //把數字轉換成字符串
        System.out.println("把整數轉換成對應的字符串:"+i+"");
        System.out.println("把整數轉換成對應的字符串:"+Integer.toString(i));

        //把整數轉換成對應的進制形式
        System.out.println("10的二進制(字符串形式):"+ Integer.toBinaryString(10));
        System.out.println("10的八進制(字符串形式):"+ Integer.toOctalString(10));
        System.out.println("10的十六進制(字符串形式):"+ Integer.toHexString(10));


        //可以把字符串當成對應的進制數據幫你轉換,查看源碼發現最大爲三十六進制,不能再大了。
        String data = "10";
        //二進制
        int a = Integer.parseInt(data, 2);
        System.out.println("a="+a);
        //三進制
        int a2 = Integer.parseInt(data, 3);
        System.out.println("a2="+a2);


        //集合: 集合是可以存儲任意對象類型數據的容器。
        ArrayList list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        //那爲什麼存入基本數據類型數據不報錯呢?原因如下:


        //自動裝箱: 自動把java的基本數據類型數據轉換成對象類型數據。
        int temp = 10;  //基本數據類型

        //JDK1.5之前的寫法(沒有自動裝箱的功能):
        //Integer b = new Integer(temp);

        Integer b = temp; //把a存儲的值賦予給b變量。


        //自動拆箱: 把引用類型的數據轉換成基本類型的數據
        Integer c = new Integer(13);

        //JDK1.5之前的寫法(沒有自動拆箱的功能):
        //int d = c.intValue(); 

        int d = c; 
        System.out.println(d);


        //引用的數據類型
        Integer e = 127;
        Integer f = 127; 
        System.out.println("同一個對象嗎?"+(e==f)); 
        // 查看Integer源碼中的IntegerCache:
        // Integer類內部維護了緩衝數組,該緩衝數組存儲的-128~127 這些數據在一個數組中。
        // 如果你獲取的數據是落入到這個範圍之內的,那麼就直接從該緩衝區中獲取對應的數據。  
        Integer e2 = 128;
        Integer f2 = 128; 
        System.out.println("同一個對象嗎?"+(e2==f2));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章