我刚刚遇到一些令我感到困惑的代码;我想澄清两种变化。Java中传递的最终变量是否保留在另一端?
例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
的变量,作为一个普遍的原则,并且遵循原则 - 这两点都提到了下面的答案。所以看起来我读了太多关于标准原因的简单的额外关键字。感谢大家!
有些情况下,使用最终肯定会给你更好的表现,例如使用http://en.wikipedia.org/wiki/Memoization。 – Stuart 2010-02-19 15:21:53
@Stuart,你很困惑。 Memoization优化与'final'关键字无关(尽管它们可以在Java中结合使用,'final'关键字不提供任何Memoization模式的固有速度优势)。 – BrainSlugs83 2014-10-05 05:11:01
OP的问题从未得到解答。一个p̶a̶s̶s̶e̶d̶返回Java最终变量保持最终的另一端? – 2017-05-19 21:20:56