Der folgende CodeGleichheitsvergleich von `boolean` und` Object` erlaubt?
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
}
}
mit javac
ohne Fehler kompiliert V1.7.0_15 und druckt "false" bei der Ausführung. Eclipse Juno beschwert sich jedoch über "Inkompatible Operandentypen Object und boolean".
Offenbar Javac Autobox die primitiven boolean b
, und vergleicht dann o
und autoboxed b
von Objekt Gleichheit, wodurch man false
, während Eclipse-das Autoboxing tun will.
Welches ist das richtige Verhalten gemäß der Java Language Specification? Wo sollte ich einen Fehler ablegen?
Hinweis: Wenn ich die Art von o
-Boolean
ändern, die Dinge funktionieren wie erwartet: Eklipse den Code akzeptiert, und der Code druckt „true“.
Runnable version on ideone.com
Überprüfen Sie die Eclipse-Einstellungen und sehen, ob es etwas flippig: Projekteigenschaften -> Java Compiler -> Fehler/Warnungen -> Mögliche Programmierung Probleme – blondeamon
Hängt was Sie „erwartet“ - sollte es 'b' Box und Referenz Gleichheit verwenden (falsches Drucken) oder "o" auspacken und primitive boolesche Gleichheit verwenden (Druck wahr)? –
[Java AutoBoxing Regeln] (http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html) –