Java GregorianCalendar changement de Fuseau horaire

Je suis en train de définir HOUR_OF_DAY champ et changement de Fuseau horaire de la GregorianCalendar objet date.

GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
//date.get(Calendar.HOUR_OF_DAY);
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));

De sortie:

HOUR: 16
HOUR: 23

Pour une raison quelconque valeur de HOUR_OF_DAY ne change pas après le réglage de différents fuseaux horaires. Mais si je décommentez la date.obtenir pour HOUR_OF_DAY, tout fonctionne exactement comme il se doit

GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
date.get(Calendar.HOUR_OF_DAY); //uncommenting this line will is changing the output
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));

De sortie:

HOUR: 16
HOUR: 13

Comment est-ce possible? Pourquoi .la méthode get est en train de changer le comportement d'un objet?