2017-01-26 4 views
1
//date is a java.util date 
//date.getTime() = 1485462073669 
int days = 3600; 
long time = date.getTime() + (days * 24 * 60 * 60 * 1000L); 

Dies ergibt Zeit = 344094777669. Wenn ich die Variable Tage umwandeln, wird das Ergebnis anders sein.Warum wirft dieser Java-Ausdruck nicht den endgültigen Wert für den langen Typ?

date.getTime() + ((long) days * 24 * 60 * 60 * 1000L) 

Diese in der Zeit führt = 4639062073669

Warum braucht sich Tage als Typ für den Ausdruck richtig zu bewerten lange geworfen werden?

+0

http://stackoverflow.com/questions/1494862/multiplying-long-values ​​ –

+0

Ich bin mehr neugierig, warum das passiert. Der zweite Ausdruck ist korrekt, aber ich frage mich, warum ich die Besetzung erzwingen muss. Gemäß der ersten Verknüpfung wird die gesamte Mathematik mit dem größten Datentyp durchgeführt, sollten also nicht alle Variablen zu lange geworfen werden? Zumal die letzte Nummer als Long Type definiert ist. –

+0

Ich sehe nicht, wie dieser Code andere Ergebnisse geben kann, wenn das Datum das gleiche Objekt ist. Wenn man einen Int zu einem Long wirft, sollte sich nichts ändern. Sind Sie sicher, dass das Datum in beiden Fällen dieselbe Instanz ist? A – davidxxx

Antwort

2

Java ist von links nach rechts.

days * 24 * 60 * 60 * 1000L 
int * int * int * int * long 
    int  * int * int * long 
      int  * int * long 
        int * long 
         long 

Sie könnten auch die folgenden getan:

1000L * days * 24 * 60 * 60 
long * int * int * int * int 
    long  * int * int * int 
      long  * int * int 
        long * int 
          long 

aber ... in Ihrem Fall sollte es nichts ändern. Ich führe Ihren Code und beide Ansätze geben das gleiche Ergebnis zurück. Vielleicht hat die date.getTime() einen anderen Wert zurückgegeben?

+0

Aber '3600 * 24 * 60 * 60' überläuft' int' nicht. – Kayaman

+1

Wahr, aber würde die erste Hälfte dieser Gleichung nicht wie 311.040.000 * 1000L aussehen? 311.040.000 überläuft keinen int. Dann würde multipliziert mit einem langen in eine lange passen. –

+0

Und kein date.getTime() ist jedes Mal dasselbe. Ich evaluiere den Ausdruck über Intellij. –

Verwandte Themen