看板 java 關於我們 聯絡資訊
※ 引述《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)
Arim:謝謝大大的解釋 09/15 23:24
ppkliu:所以要call reference字串物件是不可行囉? 09/19 20:16