当我使用一些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
}
答案 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始终按值传递。你不应该期待任何其他行为。
方法只能在传递引用时更改对象(引用仍按值传递)