數組初始化

數組初始化,你覺得簡單嗎?

a.如果你覺得簡單,那請看下面的代碼:
int[] a = new int[0];
int[] b = new int[]{};
int[] c = {};

你覺得這三種方式,你熟悉嗎?它們的作用一樣嗎?哈哈,其實,三種效果是一樣的。如果輸出的話,a,b,c的長度都是0。大家也許可能最熟悉下面這種初始化方式:
int[] d = {1,2,3,4,5};
for(int temp : d)
{
System.out.println(temp);
}

當然這種方式:
int[] e = new int[]{1,2,3,4,5},估計也有很多人知道,但是卻不一定常用。不過這種方式卻很重要,因爲如果當調用一個方法的時候,該方法的形參是一個整型數組,這時你傳實參的話,會怎麼傳?譬如說:有一個方法:
initialArray(int[] array),你會怎麼傳參數呢?有三種選擇:
A.initialArray({1,2,3,4,5})
B.initialArray(1,2,3,4,5);
C.initialArray(new int[]{1,2,3,4,5})

如果你答對了,那麼恭喜你。答案就是C。第一種方式,只能用來數組初始化的且只是這種情況,而不能傳參。當然編譯會出錯。第二種方式就更不對了。不過後面我會講到如果改變一下initialArray方法的參數形式的話,就對了。只有C是正確的答案。
上面介紹的是基本類型數組的初始化,對象數組初始化其實也一樣。比如說,String數組初始化:
String[] strArray = {"kobe","tmac"}或者
String[] strArray = new String[]{"kobe","tmac"};
當然這裏String比較特殊,可以用字符串直接初始化。
當然,我說的不是這種:
Integer[] integerArray = new Integer[3];
這只是申請了3個引用的空間而已。
我說的是Integer[] integerArray = new Integer[]{1,2,3}這樣的初始化。當然這裏Integer也比較特殊,因爲現在早已經可以自動裝包/拆包了。

b.你經常使用新的可變參數列表形式嗎?
比如說,你現在寫main函數的參數是main(String[] args)還是main(String...args),我覺得很多人仍然會用第一種形式。我個人還是非常喜歡新的可變參數列表形式的。比如說上面的一個例子,我如果把initialArray放的參數形式改一下,即
initialArray(int...args),下面傳實參的時候,你會怎麼選擇呢,我還是給出上面的三個選項,再加上一個D
A.initialArray({1,2,3,4,5})
B.initialArray(1,2,3,4,5);
C.initialArray(new int[]{1,2,3,4,5})
D.initialArray();
改成這樣的話,正確答案就有三個了。B,C,D均爲正確答案。

使用新的可變參數裏列表形式是非常靈活的,可以都不傳參數;當然它也有弊端,比如重載的時候,可能會模棱兩可。

其實,寫了這麼多,主要想表達的意思是:基礎真的很重要。引用創新工廠首席架構師蔡學鏞微博上的一句話:

優秀的程序員靠的是紮實的基礎訓練+靈活的思考能力+搜索引擎;次級的程序員靠的是過去的經驗+搜索引擎;最差的程序員只靠搜索引擎。可見紮實的基礎訓練是一個優秀程序員的必備條件。共勉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章