-1

可能重复:
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
}
4

2 回答 2

3

简短的回答是 Java 使用按值调用,而不是按引用调用。

在您的setFile方法中,您的分配xFile仅更改局部变量。它不会更改方法tmpFile中的变量run()

您应该编写代码以便setFile返回一个值;例如

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

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

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

于 2012-05-13T07:14:30.453 回答
0

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

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

于 2012-05-13T07:13:44.197 回答