2013-04-25 16 views
5

ho:È possibile impostare un calendario c uguale al calendario c2?

Calendar c = Calendar.getInstance(); 
c.set(Calendar.HOUR_OF_DAY,1); 
c.set(Calendar.MINUTE,23); 
c.set(Calendar.SECOND,22); 

Calendar c2 = Calendar.getInstance(); 

c2 = c ; // 

è quest'ultima affermazione corretta se voglio impostare Calendario c2 uguale al calendario c?

+0

Spero sia corretto ..! – SenthilPrabhu

+0

Perché non scrivere un piccolo programma di test per confrontare i risultati da solo? – Mike

+0

Questa istruzione assegnerà un riferimento a 'c' alla variabile' c2'. ('c == c2' sarà' true'). – afk5min

risposta

0

La classe di calendario ha un metodo compareTo. avere uno sguardo su quel

CompareTo()

+0

sì ma non voglio confrontarli, voglio impostare un calendario uguale a un altro – ARMAGEDDON

10

Anche se c2 = c sembrerebbe al lavoro, che non è ciò che si vuole: entrambe le variabili saranno puntano alla stessa istanza di calendario. Come risultato di questo incarico, qualsiasi modifica apportata a c sarà anche in c2 e viceversa.

È possibile utilizzare clone() metodo per fare una copia dell'oggetto Calendar, in questo modo:

Calendar c= (Calendar)c2.clone(); 
+0

Questo è quello che voglio! Grazie mille. EDIT: la tua risposta è fantastica! – ARMAGEDDON

+0

Ho appena visto questo comportamento nel mio codice! Non potevo credere ai miei occhi e ho dovuto cercare la conferma. Grazie :) – Poutrathor

0

Non avete nemmeno bisogno c2 = Calendar.getInstance(), basta assegnare direttamente 'C2 = c'.

2

c2 = c significa che avrete 2 campi che puntano alla stessa istanza. se si modifica c si modifica ANCHE c2

c2 = c.clone() clona l'istanza e restituisce un'altra istanza. se si modifica c voi non modificherà c2

3

Questa dichiarazione:

c2 = c ; 

copierà il valore della c in c2. Il valore di c è non a Calendar oggetto - è un riferimento. Dopo questa dichiarazione, le due variabili hanno lo stesso valore: due riferimenti allo stesso oggetto. Qualsiasi modifica all'oggetto Calendar può essere osservata tramite una variabile.

E 'come dare due persone diverse pezzi di carta dare il vostro indirizzo di casa - se una persona utilizza l'indirizzo per raggiungere la vostra casa e dipinge il portone verde, poi l'altra persona vedrà che anche.

Nota che questo non è Calendar -specifica - questo è il comportamento di assegnazione per tutti classi in Java.

(È molto importante distinguere tra variabili, riferimenti e oggetti, in pratica.Nella discussione normale i tre sono spesso usati in modo non corretto per brevità, ma è necessario essere in grado di dire la differenza quando è necessario.)

si noti che questo codice:

Calendar c2 = Calendar.getInstance(); 
c2 = c; 

sta creando una nuova istanza Calendar inutilmente. Sarebbe essere scritto più sensibilmente come:

Calendar c2 = c; 

Che il codice avrà lo stesso effetto visibile, ma senza chiamare Calendar.getInstance() e poi gettare via l'oggetto appena creato.

+0

Grazie, Jon Skeet! Risposta fantastica anche! Ora capisco di più sulle classi Java! – ARMAGEDDON

+0

+1 per l'esempio. Un'altra spiegazione del segno Skeety :) –

Problemi correlati