set是Integer类型的,当你想删除对应的值时,不能传入一个char类型的值,因为set的remove方法是这么定义的:
boolean remove(Object o);
如果传入是基本类型的char,那么编译器会将其转成Char,然后再向上转型成Object
。当真正进行删除的时候,是用的hashmap的remove方法:
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
只要当这个表达式为true时才会被删除,显然Integer.equals(Char)是false,所以无法被删除。