我有以下代码抛出IndexOutOfBoundsException异常:
List<Character> list = new ArrayList<>();
char c = 'a';
list.add(c);
list.remove(c); // gets fixed by passing list.remove((Character)c);
Run Code Online (Sandbox Code Playgroud)
我知道发生这种情况是因为在移除时不会发生AutoBoxing,而在添加元素时会发生AutoBoxing.我的问题是为什么?添加从char到Character的AutoBoxing是可行的,而在remove方法中它不是吗?
当数值比较运算符用于比较 Java 中的 2 个整数对象时,我试图了解以下代码的行为。
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
System.out.println(i1 > i2);
System.out.println(i1 >= i2);
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是:
false
false
true
Run Code Online (Sandbox Code Playgroud)
我理解在第一种情况下发生的事情(对象实例的比较是这样的,这就是它给出错误的原因)。但是为什么第二个和第三个场景不同,它究竟是如何工作的呢?