为什么 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;
我 运行 我的源代码上的 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;