我在循环中遇到了这个不受欢迎的char
到int
转换。假设我有这个字符列表,我想删除其中一个:
List<Character> chars = new ArrayList<>();
chars.add('a');
chars.add('b');
chars.add('c');
chars.remove('a'); // or chars.remove('a'-'0');
因此'a'
被解释为其int
值,我收到IndexOutOfBoundsException
例外。这有什么简单的解决方法吗?
答案 0 :(得分:19)
char
被提升为int
,优先于自动装箱,因此调用remove(int)
代替您可能直观预期的remove(Object)
。
你可以强迫&#34;对&#34;通过自己装入参数来调用的方法:
chars.remove(Character.valueOf('a'));
答案 1 :(得分:8)
您需要将其强制转换为对象类型,以强制编译器选择remove(Object)
而不是remove(int)
:
chars.remove((Character) 'a');
答案 2 :(得分:6)
您可以在列表中搜索a
恰好在哪里。
chars.remove(chars.indexOf('a'));