为什么 PMD 建议将 JSONArray 声明为最终的

Why PMD suggests to declare the JSONArray as final

我 运行 我的源代码上的 PMD 有点像这样

JSONArray jsarray_com = new JSONArray();

稍后我将以这种方式向 jsarray_com 添加一些元素

jsarray_com.put("One");
jsarray_com.put("Two");

现在问题是 PMD 建议将 JSONArray 声明为最终的??

你能告诉我如果声明为 final 会有什么优势吗

当我以这种方式进行更改时

final JSONArray jsarray_com = new JSONArray();

代码运行良好。

我猜你的意思是 PMD 中的 LocalVariableCouldBeFinal 规则:这只是一个优化问题:因为 PMD 注意到你的变量只被赋值一次,它建议你可以将它声明为 final,因为它会生成最佳代码。

不过,我同意Tagir Valeev的评论:这可能是一种古老的优化技术,但在现代 JIT 编译器中,它没有任何区别。我通常会关闭此规则(或者至少忽略它)。声明 final 成员和 final 类 是一种很好的做法,但要声明 final 局部变量或参数... psch!

PMD 检测到 jsarray_com 从未被重新分配,因此它建议将 final 添加到声明中以明确这一事实。当您看到 final 时,您会立即知道 jsarray_com 将始终引用同一个对象。它使代码更容易理解,但您可以忽略该建议。

尽可能使用 final 也可能有助于 JVM 优化您的代码,尽管最后一点不是那么相关。事实上,大多数 JVM 都能够在没有用户输入的情况下解决这个问题,就像 PMD 一样。

请注意,将变量声明为 final 不会阻止您通过 .put() 等方法修改对象。因此,例如,您可以这样做:

jsarray_com.put("foo");

但不是这个:

jsarray_com = anotherarray_com;