2012-05-13 70 views
-1

可能重複:
Is Java pass by reference?爲什麼有些java對象不能獲得價值引用

當我使用了一些Java類像(整型,文件,布爾) 如果我通過該實例作爲函數的參數,並嘗試在函數外使用此值後更改其值 ,該值保持不變。

例如:

private void run(){ 
     File tmpFile; 
     setFile(tmpFile); 
     System.out.println(tmpFile.getAbsolutePath()); //error tmpFile is null 
    } 

private void setFile(File xFile){ 
    xFile = jFileChooser.getSelectedFile(); // this returned object file 
} 

回答

3

簡短的回答是,Java使用呼叫按值只能改變一個對象,不會調用按引用。

在您的setFile方法中,您分配給xFile僅更改本地變量。它不會更改run()方法中的變量tmpFile

您應該編寫代碼以便setFile返回值;例如

private void run(){ 
     File tmpFile = getFile(); 
     System.out.println(tmpFile.getAbsolutePath()); 
    } 

    private File getFile() { 
     return jFileChooser.getSelectedFile(); 
    } 

(注:我改變了方法的名字,因爲一個方法叫做setXXX實際上並沒有設置什麼是無償的誤導。)

0

爪哇總是按值傳遞。你不應該期望任何其他行爲。

的方法,當你傳遞一個參考(基準仍是按值傳遞)

+0

...和謝天謝地! –

相關問題