Veröffentlicht 30. Juli 200718 j Hallo zusammen, für die Zeitmessung der Programmlaufzeit eines Programms versuche ich über ein Date-Objekt die Start und die End-Zeit des Programms zu speichern und am Ende voneinander zu subtrahieren. public class TestTime { private long startTime; private long endTime; private Date d = new Date(); public void startTimer() { startTime = d.getTime(); } public long endTimer() { endTime = d.getTime(); long endurance = endTime - startTime; return endurance; } } Start und Endzeit sind jedoch immer gleich! Auch wenn ich in der Implementierung der Methoden zwischen den beiden Aufrufen ein Thread.sleep(2000) setze. Woran kann das liegen? Danke und gruß, Benny
30. Juli 200718 j Versuchs mal mit startTime = new Date().getTime(); und endTime = new Date().getTime();
30. Juli 200718 j Autor Tatsächlich, es läuft. Aber woran liegt es, dass man zwei verschiedene Objekte erzeugen muss?
30. Juli 200718 j Aus der API-Dokumentation: Date() Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond.
6. August 200718 j Ist wahrscheinlich mehr eine Glaubensfrage aber zum Messen von Programmlaufzeiten würde ich eher System.currentTimeMillis() verwenden. Einfach deshalb damit man nicht für jeden "Schiss" komplexe Objekte erzeugt. Ist wahrscheinlich in der heutigfen Zeit sowieso kein Problem mehr aber einfach eine Sache der Sauberkeit.
7. August 200718 j Hallo, ich habe gerade den Thread gelesen und habe hierzu noch eine Frage. Ich kann mit der Antwort der API Dokumentation nichts anfangen und versuche das mal in meinen eigenen Worten zu schildern, falls das nicht richtig ist wäre es super wenn da jemand Licht ins dunkel biringt. Also durch private Date d = new Date(); wird ein Objekt d erstellt und mit startTime = d.getTime(); wird von startTime auf d referenziert.(Aus VB kenn ich das als ByRef) Wenn sich also d ändert (d.getTime()) dann wird auch der Wert in startTime geändert(ist ja kein Wert sondern nur eine Referenz). Ist ein = immer eine Referenzierung oder kann man in JAVA auch zwischen ByVal unde ByRef unterscheiden?? Danke
7. August 200718 j Servus, Hallo, [...] Also durch private Date d = new Date(); wird ein Objekt d erstellt und mit startTime = d.getTime(); wird von startTime auf d referenziert.(Aus VB kenn ich das als ByRef) Das stimmt nicht ganz. Du referenzierst hier nicht, da getTime() einen primitiven long zurückliefert. Und der wird by Value zurückgeliefert. Deshalb kannst Du d ändern, wie Du willst, Dein startTime bleibt gleich. Ist ein = immer eine Referenzierung oder kann man in JAVA auch zwischen ByVal unde ByRef unterscheiden?? Danke Bei Java werden primitive Datentypen (z.B. int, boolean, double) by Value übergeben, alle Objekte by Reference. Wenn Du also ein Objekt hast, das Du übergibst oder zuweist, dann übergibst Du lediglich eine Referenz auf das Objekt. Im oberen Beispiel ist d eine Referenz auf ein Date-Objekt. Das in d enthaltene time-Attribut ist ein Primitive, deshalb wird es by Value verarbeitet. Ich hoffe, das hilft Dir weiter. Peter
7. August 200718 j Hy kingofbrain, jetzt kapier ich es nicht mehr. Warum funktioniert dann das Beispiel von HopelessFrag nicht?? Hier werden doch die Werte by Value übergeben:confused: Somit sollten doch die 2 Variablen verschiedene Werte haben. Gruß
7. August 200718 j Aber die beiden "by value"-Werte kommen vom gleichen Objekt. Wird ein Date-Objekt initialisiert, hält es die Zeit "fest" und ändert sich nicht mehr. Egal, wie oft man getTime() aufruft und unabhängig davon, welcher Variablen getTime() zugewiesen wird.
7. August 200718 j Ahhhh Danke, dann versteh ich jetzt auch den Auszug aus der API Dokumentation. Hat also mit dem Object und der Zuweisung garnichts zu tun. Vielen Dank
7. August 200718 j Ahhhh Danke, dann versteh ich jetzt auch den Auszug aus der API Dokumentation. Hat also mit dem Object und der Zuweisung garnichts zu tun. Vielen Dank
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.