2016-08-19 90 views
-1
final DateFormat dateFormat = DateFormat.getDateTimeInstance() ; 
    GregorianCalendar time = new GregorianCalendar(); 
    GregorianCalendar limit = time; 
    limit.add(GregorianCalendar.HOUR_OF_DAY, 4); 

    String timeForm = dateFormat.format(time.getTime()); 
    String limitForm = dateFormat.format(limit.getTime()); 
    System.out.println(timeForm); 
    System.out.println(limitForm); 

輸出應該是時間「now」,然後是4小時後的時間。當我更改GregorianCalendar的一個實例時,另一個實例發生更改

打印出來時,timeForm和limitForm都會顯示4小時後的時間。這是爲什麼?

+0

那裏只有一個實例。一個變量不是一個實例,而是一個參考。 'GeorgianCalendar limit = time;'不會創建'GeorgianCalendar'的新實例,它只是告訴'limit'引用'time'引用的同一個對象。 –

回答

1

您將第二個日曆設置爲等於第一個日曆,而不是創建第二個實例。所以當你改變實例時,它會影響兩個變量。如果您製作limit = new GregorianCalendar();,則輸出將顯示2個不同的值

1

您想退一步閱讀Java如何處理「引用類型」。

換句話說:任何在Java中是某種對象的東西(如GregorianCalendar對象)都是通過引用來標識的。

當你做出這樣

limit = time; 

的轉讓,那麼你是不是創建另一個對象。你只需要兩個變量,時間和限制,這兩個變量都指向同一個對象。

因此,當您使用一個變量並對引用對象進行狀態改變時,當然其他變量也「看到」這些變化。

相關問題