I am facing with this unwanted
List<Character> chars = new ArrayList<>();
chars.remove('a'); // or chars.remove('a'-'0');
A char is promoted to an int, which takes precedence over autoboxing, so remove(int) is called instead of remove(Object) you may have intuitively expect.
You can force the "right" method to be called by boxing the argument yourself: