Re: Eklige Vergleiche von Referenzen mittels ==



Peter Büttner wrote:
Bernd Post wrote:
Peter Büttner schrieb:

[...]

Das ist sehr praxisrelevant, zeigt es doch wie eine 'Optimierung' eine
Sprache so verkompliziert das man - obwohl sie doch als einfach geplant
war - auf einfache Art Fehler machen kann.

Was an der Sprache erscheint dir schwer?

Verkompliziert.

Ich mag damit zurechtkommen, aber es muß ja nicht sein das man bei
Popelkram drauf achten muß nix falsch zu machen.

dazu fiel mir gerade noch was ein:

int i1 = 1234;
Integer o1 = i1;
Integer o2 = i1;

System.out.println( o1==o2 ); // false
System.out.println( o1!=o2 ); // true
System.out.println( o1<=o2 ); // true
System.out.println( o1<o2 ); // false

System.out.println( i1==o2 ); // true
System.out.println( i1!=o2 ); // false
System.out.println( i1<=o2 ); // true
System.out.println( i1<o2 ); // false

Der letzte Block ist konsistent (man vergleicht ein int mit einem Integer)

Aber im ersten steht
o1==o2 false
o1!=o2 true
o1<=o2 true
o1<o2 false

wobei ich für Zahlen dies Verhalten 'etwas ungewöhnlich' finde:
Wenn
o1<=o2 true
müsste mindestens eins der folgenden beiden true ergeben
o1==o2 false
o1<o2 false
Das ist doch schon bischen krank, oder?

Ich denke es ist dasselbe was rauskommt wenn man _schlechtes_
Operator-overloading betreibt. Hier ist es sogar gleich in die
Sprache eingebaut. Und nur die schlechte Version, man hat nicht
die Option was Gutes damit(OperOver) zu machen.


Peter
.