Re: [問題] 傳值

看板java作者 (小安)時間15年前 (2010/09/15 23:10), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《Arim (Arim5566)》之銘言: : //test2.java : 1 public class test2 : 2 { : 3 public static void main(String[] args) { : 4 Integer i=new Integer(5); : 5 System.out.println(i); : 6 some(i); : 7 System.out.println(i); : 8 } : 9 private static void some(Integer j) : 10 { : 11 j=50; : 12 } : 13 } : Output出來的結果,i仍然是5 : 不過Integer不是屬於物件型態嘛? : 那為什麼在這個例子,仍然相當於c++的傳值呼叫? : 做所謂的裝箱動作不就是為了要有傳參考的效果嘛? 有兩件事你需要注意: 1. Integer, Character, Double, ... 這些 Wrapper 物件都有個特性叫做 Immutable, 你沒有辦法去修改這些物件所代表的值。 String 也有 Immutable 的特性,我用它來舉個例: String s1 = "foo"; s1 += "bar"; 第二行看起來很像是把 "bar" 接到 s1 後面, 但其實是另外生成了一個內容為 "foobar" 的 String 物件, 而原本的 foo 物件其實還在。 (只是不再被 reference 了) 2. j = 50 這行用了另一個特性叫做 Auto-Boxing, 其實等同於 j = new Integer(50) , 所以當執行完這一行後,j 指向的是新的物件,而 i 指的還是原來的物件。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.183.195 ※ 編輯: tkcn 來自: 140.122.183.195 (09/15 23:11)

09/15 23:24, , 1F
謝謝大大的解釋
09/15 23:24, 1F

09/19 20:16, , 2F
所以要call reference字串物件是不可行囉?
09/19 20:16, 2F
文章代碼(AID): #1CaE7eBp (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
0
2
完整討論串 (本文為第 2 之 3 篇):
問題
3
9
問題
2
2
問題
0
2
文章代碼(AID): #1CaE7eBp (java)