Als ich die Äquivalenzbeziehung untersuchte, kam Java Equals heraus
Ich denke, Sie wissen gut, wann es wird. Dies ist die Zeit, in der es sich um unterschiedliche Instanzen handelt, die denselben Wert haben.
und umgekehrt
Ich denke nicht, dass der Fall des Werdens sehr vertraut ist.
Dieses Mal werden wir die Angelegenheit überprüfen.
Umgebung: Java1.8 Eclipse Neon.1
python
@org.junit.Test
public void test() {
boolean b1 = 1 == 1.0;
Integer i2 = 1;
boolean b2 = i2==1.0; //true
boolean b3 = i2.equals(1.0); //false
System.out.println(b2);
System.out.println(b3);
}
Double # valueOf wird aufgerufen, um 1.0 vom Double-Typ zum Double-Typ automatisch zu boxen.
auto-boxing
public static Double valueOf(double d) {
return new Double(d);
}
Es ist falsch, da es sich um einen Vergleich handelt, bei dem Gleichwerte zwischen 1,0, konvertiert in Double-Typ, und 1 vom Integer-Typ verwendet werden.
Integer.equals()
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Java Puzzle hat ein ähnliches Problem mit dem automatischen Boxen.
https://www.youtube.com/watch?v=V1vQf4qyMXg&t=11m19s
auto boxing can give you what we call the surprise left jab
by Joshua Bloch
Recommended Posts