为什么大多数开源java项目中的局部变量都没有被声明为final?

时间:2011-04-06 21:47:09

标签: java final local-variables

如果我查看OpenJDK或Hibernate或Apache中的java源代码,我还没有看到任何声明为final的局部变量。

这表明一些最广泛使用的java软件库的开发人员:

  • 不要相信最终关键字会提高可读性。

  • 不相信它会显着提高性能。

为什么stackoverflow上的大多数控制者认为应该使用它(基于最高投票回复)?

5 个答案:

答案 0 :(得分:5)

可能因为在final这个词中键入五个LONG字母很麻烦......为什么他们会经历写作的痛苦

final int x;

当输入的次数是

的两倍
int x;

我们开发人员很懒,你知道......:P

答案 1 :(得分:4)

  

不要相信最终的关键字   提高可读性。

有些人(例如我自己)发现final的可读性过高。

  

不要相信它   提高绩效。

final局部变量不会提高性能。

答案 2 :(得分:3)

据我所知,final关键字对变量的运行时性能没有影响。

我认为它的主要目的是帮助您捕获错误。如果您知道某些事情永远不会改变,那么您可以将其标记为这样。与我们可以使用注释的原因类似,任何时候我们都可以将编译时错误交换运行时错误,我们这样做。在您处理它时发现错误,并且它在您的介意,并没有消失并损坏某人的数据导致您失去客户,是的,这是一件非常好的事情。你得到编译错误,你修复它,你继续前进,你不打破每晚构建,是的那些是好事。

答案 3 :(得分:2)

final关键字有两个用途:

  1. 将类或方法声明为final以防止子类化/覆盖
  2. 将变量声明为final,以防止更改它(指定新值)
  3. 案例2通常应用于成员变量,以使对象不可变(至少部分)或方法参数,以防止事务分配。

    如果是局部变量(即方法作用域而不是参数),通常不需要或不需要,因为这些变量很可能在方法中被更改(否则你可能不需要它们,除了缓存引用对于方法范围)。

答案 4 :(得分:2)

我怀疑声明局部变量final是否会提高性能。由于final的存在,已经要求Java编译器能够判断变量是否可能被多次分配,或者可能未被初始化。因此,实际上声明本地为final并不会告诉编译器任何它不知道的东西 - 这只是为了读者的利益。

现在,它是否有时会提高可读性,这是更主观的。在一段复杂的代码中,承诺(对自己或未来的读者)变量只写一次是很好的。但是简化代码可能更好,所以无论如何都很明显。