有時你會發現,Bug測試沒測出來,結果生產跑出來了,只能一句mmp,無情啊。
通常,我們會使用HashSet作爲集合判斷是否包含某一元素,show code
public class Test{
public static void main(String []args){
HashSet<String> setString = new HashSet<String>(Arrays.asList("1"));
if(setString.contains("1")){
System.out.println(1);
}
if(setString.contains(1)){
System.out.println(2);
}
}
}
輸出結果: 1
我們來看下 HashSet的源碼:
public boolean contains(Object o) { return map.containsKey(o); }
這個contains方法,實質上調用了HashMap的contains方法。調用這個方法需要注意的是判斷元素類型必須和HashSet的參數類型相同,當類型不同時,雖然編譯可以通過(因爲參數是object類型的),但實際運行時,就不是我們需要的結果,基礎很重要,半道出家,難搞。