Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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ß

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...