2016-01-12 186 views
-4

我知道Java總是通過價值傳遞。然而,在下面的代碼Java通過引用傳遞

public class Test{ 

String str = new String("good"); 
char[] ch = {'a','b','c'}; 
int i = 10; 
public void change(String str,char ch,int i){ 

    str = "test ok"; 
    ch = 'g'; 
    this.i = i+1;  
} 

public static void main(String[] args){ 

    Test tt = new Test(); 
    tt.change(tt.str,tt.ch[0],tt.i); 
    System.out.println(tt.i); 
    System.out.print(tt.str+" and "); 
    System.out.println(tt.ch);  
} 

}

tt.i的輸出爲11.什麼是 「本」 是什麼意思?爲什麼它可以改變我的價值?

+1

實例化的類Test的類實例的引用的含義有兩個變量「我」,在方法之外創建的一個,另一個是參數.. 關鍵字this將用於調用方法外部的一個創建。 如果沒有它,它會調用參數。 –

+1

'i'是一個類變量,您在該方法中將1添加到它。你期待它做什麼? – WalterM

+4

使用有意義的變量名稱是避免混淆的一種很好的方法。 – David

回答

1

因爲你改變了我的價值是11的「本」是您在叫new Test()