为什么有些java对象无法获取值引用

时间:2012-05-13 07:04:51

标签: java

  

可能重复:
  Is Java pass by reference?

当我使用一些java类时(Integer,File,Boolean) 如果我将实例作为参数传递给函数并尝试更改其值 在函数外部使用此值后,该值保持不变。

例如:

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
}

2 个答案:

答案 0 :(得分:3)

简短的回答是Java使用call-by-value,而不是call-by-reference。

setFile方法中,您对xFile的分配只会更改本地变量。它不会更改tmpFile方法中的变量run()

您应该编写代码,以便setFile返回一个值; e.g。

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

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

(注意:我更改了方法名称,因为实际上没有设置任何内容的名为setXXX的方法是无意的误导。)

答案 1 :(得分:0)

Java始终按值传递。你不应该期待任何其他行为。

方法只能在传递引用时更改对象(引用仍按值传递)