51

使私有方法最终化是否有益?那会提高性能吗?

我认为“private final”没有多大意义,因为私有方法不能被覆盖。所以方法查找应该像使用 final 时一样高效。

将私有辅助方法设为静态(如果可能)会更好吗?

最好用什么?

  private Result doSomething()
  private final Result doSomething()
  private static Result doSomething()
  private static final Result doSomething()
4

6 回答 6

68

添加final到方法不会提高 Sun HotSpot 的性能。在final可以添加的地方,HotSpot 会注意到该方法永远不会被覆盖,因此将其视为相同。

在 Javaprivate中,方法是非虚拟的。您不能覆盖它们,即使使用子类可以访问它们的嵌套类也是如此。例如,调用私有方法的方法与用于非私有方法的方法不同。添加final到私有方法没有任何困难。

与以往一样,这些微优化不值得花时间。

于 2009-12-31T12:09:07.737 回答
21

private static Result doSomething(),如果此方法未使用任何实例变量。在任何情况下,使它们成为最终的都是没有意义的,因为访问器是私有的。

于 2009-12-31T08:03:25.227 回答
8

不,它不会。私有方法不被继承。所以让他们最终成为一个有争议的问题。另请注意,您不应将方法设为最终的性能。JVM 比这更聪明。这种优化没有多大用处。您应该根据语义和设计使事情成为最终的、私有的、私有的、受保护的、私有的等。

于 2009-12-31T08:02:22.983 回答
7

将私有方法标记为 final 不会改变任何内容,但可能会使查看代码的初级开发人员感到困惑。把事情简单化。

于 2009-12-31T08:04:04.473 回答
4

IBM Developer 作品:Java 理论与实践:这是您的最终答案吗?final文章是关于在 Java 中使用关键字的老歌,但很好:

于 2009-12-31T08:09:39.907 回答
-1

通过使方法最终,我们不能覆盖该方法。由于私有方法不能在类外访问。没有使方法最终和私有的感觉。它可能会影响性能。

于 2009-12-31T08:26:17.893 回答