寫程式就像學音樂一樣,只看樂譜不動手永遠無法演奏出美妙旋律。只演奏一遍也不可能立刻成為音樂家。 這部落格紀錄我的學習筆記,各位看倌若找不到需要的資料請見諒~~~ This blog records my study about Computer Science.
不管是否為基本型態java傳遞的永遠是物件的實例該實例指向某記憶體位址(儲存其值)基本型態都是final class,其值無法覆寫傳給method時,如果變動其值,則產生新的實例,以指向新的記體位址如果沒變動其值,無須產生新的實例,仍指向同一物件實例並不是你所理解的「將變數的值複製給method的參數」沒有複製不複製的過程Integer check01(Integer iii){ return iii;}Integer check02(Integer iii){ iii += 1; return iii;}Integer iii = new Integer(1);System.out.println(iii==check01(iii));結果會是true,因為沒任何變動依然是原來那份物件實例,沒有所謂的複製過程System.out.println(iii==check02(iii));結果會是false,因為變動iii,實際上是產生新的物件實例與原來的iii已經是完全不同的物件了至於其他不屬於final class類別的物件實例就都會是同一份物件實例,指向同一位址,只是其儲值可能依需求被改變例如orm對應資料表欄位的pojo物件歡迎指教tsaipifong@gmail.com
感謝您的指正講得很詳細
不管是否為基本型態
回覆刪除java傳遞的永遠是物件的實例
該實例指向某記憶體位址(儲存其值)
基本型態都是final class,其值無法覆寫
傳給method時,如果變動其值,
則產生新的實例,以指向新的記體位址
如果沒變動其值,
無須產生新的實例,仍指向同一物件實例
並不是你所理解的「將變數的值複製給method的參數」
沒有複製不複製的過程
Integer check01(Integer iii){
return iii;
}
Integer check02(Integer iii){
iii += 1;
return iii;
}
Integer iii = new Integer(1);
System.out.println(iii==check01(iii));
結果會是true,因為沒任何變動
依然是原來那份物件實例,沒有所謂的複製過程
System.out.println(iii==check02(iii));
結果會是false,因為變動iii,實際上是產生新的物件實例
與原來的iii已經是完全不同的物件了
至於其他不屬於final class類別的物件實例
就都會是同一份物件實例,指向同一位址,
只是其儲值可能依需求被改變
例如orm對應資料表欄位的pojo物件
歡迎指教tsaipifong@gmail.com
感謝您的指正
刪除講得很詳細