6

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

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

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

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

为什么 stackoverflow 上的大多数贡献者都认为应该使用它(基于最高投票的响应)?

4

5 回答 5

5

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

final int x;

当它的打字量是打字量的两倍时

int x;

?

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

于 2011-04-06T21:54:12.057 回答
4

不要相信 final 关键字会提高可读性。

有些人(比如我自己)发现过多final的 s 会降低可读性。

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

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

于 2011-04-07T00:22:38.027 回答
3

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

我相信它的主要目的是帮助您捕捉错误。如果您知道某些事情永远不会改变,那么您将其标记为这样。类似于我们尽可能使用注释的原因,任何时候我们可以用运行时错误换取编译时错误,我们都会这样做。当你在处理它时发现一个错误,它在你的脑海中是新鲜的,它并没有破坏某人的数据,导致你失去客户,是的,这是一件非常好的事情。你得到编译错误,你修复它,你继续前进,你不会破坏夜间构建,是的,这些都是好事。

于 2011-04-06T22:00:53.283 回答
2

final 关键字有两种用途:

  1. 将类或方法声明为 final 以防止子类化/覆盖
  2. 将变量声明为 final 以防止更改它(分配新值)

情况 2 通常应用于成员变量以使对象不可变(至少部分)或应用于方法参数以防止意外分配。

如果是局部变量(即方法范围而不是参数),通常不需要或不需要,因为这些变量可能会在方法中更改(否则您可能不需要它们,除非缓存方法范围的引用)。

于 2011-04-06T21:56:45.383 回答
2

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

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

于 2011-04-06T21:58:26.143 回答