2016-08-19 2 views
-1

Die Ausgabe sollte die Zeit "jetzt" sein, gefolgt von der Zeit nach 4 Stunden.Wenn ich eine Instanz eines Gregorianischen Kalenders ändere, ändert sich auch die andere Instanz.

Wenn es ausgedruckt wird, zeigen sowohl timeForm als auch limitForm die Zeit nach 4 Stunden an. Warum das?

+0

Es gibt nur eine Instanz. Eine Variable ist keine Instanz, sondern eine Referenz auf eine. 'GeorgianCalendar limit = time;' erstellt keine neue Instanz von 'GeorgianCalendar', sondern sagt' limit' nur, dass er auf dasselbe Objekt verweist, auf das 'time' verweist. –

Antwort

1

Sie legen den zweiten Kalender gleich dem ersten fest, anstatt eine zweite Instanz zu erstellen. Wenn Sie die Instanz ändern, wirkt sich das auf beide Variablen aus. Wenn Sie limit = new GregorianCalendar(); machen, wird die Ausgabe 2 verschiedene Werte anzeigen

1

Sie wollen zurücktreten und lesen, wie Java mit "Referenztypen" zu tun hat.

Mit anderen Worten: alles in Java, das eine Art Objekt ist (wie GregorianCalendar Objekte) wird über eine Referenz identifiziert.

Und wenn Sie einen Auftrag wie

limit = time; 

dann machen Sie sind nicht ein anderes Objekt zu schaffen. Sie müssen nur zwei Variablen, Zeit und Limit, die auf das gleiche Objekt "zeigen".

Wenn Sie also eine Variable verwenden und eine Statusänderung am Referenzobjekt vornehmen; natürlich "sieht" auch die andere Variable diese Änderungen.

Verwandte Themen