Java Arrays.asList()當引數為基本型別陣列易犯的錯誤
阿新 • • 發佈:2020-12-18
專案場景:
今天刷LeetCode,用到了Arrays.asList()方法,但是由於沒報錯,所以一時不知錯在哪。
public class mytest { public static void main(String[] args) { char[] cary = "abcde".toCharArray(); //舉個例子 Set<Character> set = new HashSet(Arrays.asList((cary))); System.out.println(set.size()); } } /*結果 1 */
問題描述:
我記得Arrays.asList()確實能吧陣列轉換為ArrayList()的啊。所以set.size()=5才對。然而等於1.
原因分析:
檢視Arrays.List()原始碼
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
一開始沒看出個所以然,但是在idea中,滑鼠指向T的時候
T是個繼承於Object的類,並非基本型別,所以char[]作為引數匯入事,T 為char[]。也就是Arrays.asList(傳入一個char[]) 返回的是ArrayList<char[]>型別。所以set中只有一個值。
解決方案:
知道原因就很簡單啦。多加點程式碼
建立一個Character[]陣列作為Arrays.asList()的引數
或者建立個ArrayList<Character> ,然後一個一個add()進去。