考虑以下代码:
import java.util.PriorityQueue;
public class Test {
public static void main(String argv[]) {
PriorityQueue<A> queue = new PriorityQueue<>();
System.out.println("Size of queue is " + queue.size()); // prints 0
try {
queue.add(new A());
} catch (ClassCastException ignored) { }
System.out.println("Size of queue is " + queue.size()); // prints 1
}
}
class A { } // non-comparable object
Run Code Online (Sandbox Code Playgroud)
在此代码中,一个明确不可比较的对象被添加到PriorityQueue. 正如PriorityQueue.addJavadoc 所预期的那样,此代码会抛出 a ClassCastException,因为该对象不可比较。
然而,尽管抛出了异常,但队列的大小似乎仍然增加了。
我原本期望两个打印语句都输出 0,但第二个打印语句实际上输出 1,就像一个对象已添加到队列中一样。
这里发生了什么?