2013-06-26 7 views
5

Ich habe ein Algorithmus in Java geschrieben, die iterativ primitive Guss tut wie:Kosten für das Gießen von primitiven Typen in Java

int val = (int) Math.max(val1, val2); 

Da ich versuche, um die Leistung des Algorithmus zu verbessern, möchte ich wissen, ob sich wiederholende das obige Gießen muss vermieden werden, z mit etwas wie:

int val = ((val1>val2) ? val1 : val2); 

PS: Ich habe eine Suche in Stackoverflow, aber ich habe keine ähnliche Antwort gefunden.

+1

Sie sollten nicht casten, es [gibt ein int zurück] (http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#max%28int,%20int%29) –

+2

@KarthikT Sie nehmen an, dass 'val1' und' val2' sind 'int's – Jonathan

+0

@ Jonathan sind nicht beide Beispiele in diesem Fall identisch? Wenn du einen in einen werfen musst, musst du den anderen einwerfen? Wird diese Downcast nicht automatisch von Java ausgeführt? –

Antwort

5

Nehmen wir mal an, val1 und val2 sind beide double und Sie wollen immer noch einen int (da Sie sagen, dies ist nur ein Beispiel).

Ich würde vorschlagen, zuerst die Höhe der Zeit vergleichen es Sie

double val = Math.max(val1, val2) 

vs rufen nimmt:

int val = (int) Math.max(val1, val2); 

Wenn Sie diese Benchmark korrekt ausgeführt (Bedeutung wormup tun in der JVM und messen die Menge der Zeit für Millionen von Anrufen) höchstwahrscheinlich Sie die Zeit, in der Besetzung zu finden ist neglilibe im Vergleich zu Math.max()

Im Allgemeinen, bevor Sie den Code weniger lesbar und komplizierter für die Leistung, zuerst müssen Sie wissen, dass die Leistungssteigerung ist real.

+0

Danke! Genau das, wonach ich gefragt habe! –