如果未在代码中进行修改,我应该声明一个Java字段“ final”吗?


问题内容

我的问题主要是关于性能。编译器更好地了解,例如,对象实例化后未修改某些变量。那么,为什么还要打入决赛呢?

我认为这里可能会出现许多结构/逻辑原因,但从性能角度来讲?有关系吗?

谢谢,


问题答案:

现代 JVM中,final 不应
影响性能。这对于私有字段尤其如此,但是即使对于非私有字段,JIT仍可以将非最终字段视为最终字段,从而对其进行优化,然后,如果它加载了一些确实修改了该字段的代码,则可以取消优化

也就是说,使用final的主要原因不是性能,而是使代码更易于维护。通过使字段成为最终字段,您减少了代码读者必须考虑的“活动部分”的数量,从而使推理代码变得更加容易。