直接先說結論:1不會報錯,2、3都會報UnsupportedOperationException錯
源碼分析:
①先看看ArrayList的add方法的原理
看上去很簡單,就是數組賦值,但是注意這個ArrayList的包名:java.util.ArrayList(這個就是引發問題的核心區別)
②再看看singletonLIst的add方法原理
實例化singletonLIst後並未找到add方法,說明調用的是其父類的add方法,看看唄~
這裏就是異常直接拋出來了!
③再看看asList的add方法原理吧
這裏你是不是很奇怪,這不是new了一個ArrayList嗎?其實這就是爲什麼我在第一點時候說注意看包名,這個ArrayList的包名是:java.util.Arrays
也就是說這個ArrayList是他自己實現的一個靜態內部類,然而依然沒有實現add方法,所以和2一樣調用父類的add方法,直接拋錯。