Re: [問題] 用函數讓字串陣列反轉的問題

看板java作者 ( )時間12年前 (2012/04/14 13:27), 編輯推噓4(402)
留言6則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《pa015596 (sdfgdgf)》之銘言: : 當在main呼叫reverse(data)時 data這個陣列的值卻沒被修改 : 請教大大為何str=str2這行指令不能將結果修改到data Java 永遠是 pass-by-value。 http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.1 When the method or constructor is invoked (§15.12), the values of the actual argument expressions initialize newly created parameter variables, ... 也就是說,當 method, constructor 被呼叫時,裡面的 parameter variable 是新建出來 的參數,而不是 reference 本身。 看一下這個例子 public static void main(String[] args) { People mary = new People("Mary"); transfer(mary); System.out.println(mary.getName()); // still Mary, not John } private static void transfer(People p) { p = new People("John"); } 為什麼不會變 ? 讓我們看一下實際發生的事 People mary = new People("Mary"); mary 0xAABBCC ------------- ----------------- | 0xAABBCC | ------------> | People("Mary")| ------------- ----------------- transfer(mary); mary 0xAABBCC -------------- ----------------- | 0xAABBCC | ------------> | People("Mary")| -------------- -----------> ----------------- p / --------------/ | 0xAABBCC | -------------- 當 transfer 被呼叫時,parameter p 不是 mary, 而是 mary 的複製品。 因此當執行到 p = new People("John") 時 mary 0xAABBCC -------------- ----------------- | 0xAABBCC | ------------> | People("Mary")| -------------- ----------------- p 0x112233 -------------- ----------------- | 0x112233 | ------------> | People("John")| -------------- ----------------- 這就是實際發生的事。參數 p 被指向了 John,但是參數 mary 仍然指向 Mary。 System.out.println(mary.getName()) mary 0xAABBCC -------------- ----------------- | 0xAABBCC | ------------> | People("Mary")| ==> 印出 Mary -------------- ----------------- ========================================================== 這樣子你應該可以理解為什麼 str1 = str2 不會達到你要的效果。 -- We who cut mere stones must always be envisioning cathedrals. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.55.118 ※ 編輯: awert 來自: 114.39.55.118 (04/14 13:30)

04/14 13:54, , 1F
如果people不new 用set get 結果似乎會不一樣
04/14 13:54, 1F

04/14 14:00, , 2F
謝謝大大詳細的解說
04/14 14:00, 2F

04/14 14:04, , 3F
@hate9527 > 用setter當然會不一樣
04/14 14:04, 3F

04/14 17:29, , 4F
我是提醒提問人呀
04/14 17:29, 4F

04/15 02:03, , 5F
推..原po真熱心
04/15 02:03, 5F

04/29 22:43, , 6F
熱心給推!
04/29 22:43, 6F
文章代碼(AID): #1FYGhKYx (java)
文章代碼(AID): #1FYGhKYx (java)