2012-11-08 11 views
21
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange() 

Utilities.getDistance gibt double zurück und getAttackRange gibt int zurück. Der obige Code ist Teil einer if-Anweisung und muss wahr sein. Also ist der Vergleich gültig?Ist es zulässig, ein Double mit einem Int in Java zu vergleichen?

Dank

+0

Haben Sie es versuchen? Hat es funktioniert? –

+0

Wie kann ich testen, ob es gültig ist? Compiler akzeptiert es, aber ich kann nicht wissen, ob die tatsächlichen numerischen Werte tatsächlich verglichen werden. – Crone

+1

Haben Sie es selbst versucht? Ein einfacher Test im Java-Code hätte genügen können.Überprüfen Sie meine Antwort für das gleiche –

Antwort

53

Ja, es ist gültig - es wird die int zu einem double vor Durchführung des Vergleichs fördern.

Siehe JLS section 15.20.1 (Numerical Comparison Operators), die auf JLS section 5.6.2 (Binary Numeric Promotion) verweist.

Aus letzterem:

Widening primitive Umwandlung (§5.1.2) angewendet zu konvertieren entweder oder beide Operanden wie durch die folgenden Regeln festgelegt:

  • Wenn einer der Operanden ist der Geben Sie double ein, der andere wird in double konvertiert.

  • ...

2

Dies sollte in Ordnung sein. In Fließkommaoperationen/Vergleichen, wenn ein Argument schwebt/doppelt ist, dann anderes int wird ebenfalls auf dasselbe hochgestuft.

0

Es wird in Ordnung sein.

Java einfach return true der Zahlenwert ist gleich:

int n = 10; 
    double f = 10.0; 
    System.out.println(f==n); 

Der obige Code wahr druckt.

+1

Sie müssen vorsichtig sein (und in der Regel sogar vermeiden), Gleitkommawerte mit dem Operator' == 'zu vergleichen. –

+0

Und was möchten Sie diese 2 Werte vergleichen? – Flawyte

+0

Alle 'int's sind genau als' double' darstellbar. –

5

Bei der Ausführung von Operationen (einschließlich Vergleichen) mit zwei verschiedenen numerischen Typen führt Java eine implizite Erweiterungskonvertierung durch. Dies bedeutet, dass beim Vergleich eines double mit einem int das int in ein double konvertiert wird, damit Java die Werte als zwei double s vergleichen kann. Also ist die kurze Antwort ja, der Vergleich eines int und eines double ist gültig, mit einem Vorbehalt.

Das Problem ist, dass Sie sollten nicht zwei Floating-piont Werte für die Gleichstellung vergleichen mit ==, <= oder >= Betreiber wegen möglicher Fehler in Präzision. Außerdem müssen Sie auf die speziellen Werte Acht geben, die ein Doppel nehmen kann: NaN, POSITIVE_INFINITY und NEGATIVE_INFINITY. Ich empfehle Ihnen dringend, etwas zu recherchieren und über diese Probleme zu lernen, wenn Sie double s vergleichen.

+0

Lustige Sache ist das ist mein Professor-Code. Aber ja, ich werde das Thema jetzt untersuchen – Crone

+0

@Crone Für eine Schulaufgabe können Sie diese Randfälle wahrscheinlich ignorieren, aber Sie sollten immer noch über sie wissen. Die Entscheidung, sie zu ignorieren, ist eher als völlige Ignoranz. –

+0

Ich sehe nichts falsch daran, ein 'double' mit' <=' or '> = 'gegen ein' int' zu vergleichen. Nur exakte Gleichheit kann fraglich sein. –

1

ja, es ist absolut gültig Datentyp int und double-Datentyp vergleichen ..

int i =10; 
double j= 10.0; 
if (i==j) 
{ 
System.out.println("IT IS TRUE"); 
} 
Verwandte Themen