【发布时间】:2010-02-19 15:02:30
【问题描述】:
我刚刚遇到了一些让我有些困惑的代码;我真的想澄清两个变体。
示例 1:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file.getAbsolutePath();
}
声明file“final”的目的是什么?由于 Java 原语是按值传递的,而 getAbsolutePath() 只是返回一个 String,因此变量在另一边(调用方法)不会是 final,对吗?而且由于file 变量只存在于这两行的范围内,我真的看不出final 关键字的任何用途。有什么我想念的吗?有人看到这样做的理由吗?
示例 2:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file;
}
因为这里实际的对象被返回...这是否意味着file 变量将是常量/final 在另一边...?这似乎没有意义。
一般来说,在我看来,您传递了一个变量,没有它是访问类型。如在,我可以在一个函数中有一个private 变量,并带有一个返回它的public get 函数——但是通过调用函数接收它的变量必须指定一个访问修饰符。因此,如果它指定public,则返回的变量将是该范围内的public。如果它指定private,则返回的变量将是该范围内的private。和final 有区别吗?变量的“恒定性”是可以传递的吗?考虑到我对 Java 的了解,这让我觉得不太可能。
还是我完全忽略了这一点,而上面代码中的 final 关键字还有其他用途?
编辑:
我与编写代码的原始开发人员进行了核对,他说他只输入了final 关键字,因为他最初认为该方法会更长,并希望确保文件始终保持不变。他还说,他通常将不应更改的变量声明为final,作为全面规则和原则上的规则-以下两个答案都提到了这一点。因此,出于标准原因,我似乎对包含的一个简单的额外关键字进行了过多的阅读。谢谢大家!
【问题讨论】:
标签: java return-value final parameter-passing constants