Следующий код
public class TestComparison {
public static void main(String[] args) throws Exception {
boolean b = true;
Object o = new Boolean(true);
System.out.println("comparison result: "+
(o == b)); // Eclipse complains about this expression
}
}
компилируется без ошибок с javac
V1.7.0_15 и печатает "false" при запуске. Тем не менее, Eclipse Juno жалуется на "Несовместимые типы операндов Object и boolean".
Очевидно, javac autoboxes примитивный логический b
, а затем сравнивает o
и autoboxed b
по равенству объекта, давая false
, в то время как Eclipse отказывается делать автобоксинг.
Какое правильное поведение соответствует спецификации языка Java? Где я должен указать ошибку?
Примечание. Если я изменяю тип o
на Boolean
, все работает так, как ожидалось: Eclipse принимает код, а код печатает "true".