Java 为什么PMD建议将JSONArray声明为最终版本
我在我的源代码上运行了PMD,这有点像这样Java 为什么PMD建议将JSONArray声明为最终版本,java,pmd,Java,Pmd,我在我的源代码上运行了PMD,这有点像这样 JSONArray jsarray_com = new JSONArray(); jsarray_com.put("One"); jsarray_com.put("Two"); final JSONArray jsarray_com = new JSONArray(); 稍后,我将以这种方式向jsarray_com添加一些元素 JSONArray jsarray_com = new JSONArray(); jsarray_com.put("O
JSONArray jsarray_com = new JSONArray();
jsarray_com.put("One");
jsarray_com.put("Two");
final JSONArray jsarray_com = new JSONArray();
稍后,我将以这种方式向jsarray_com添加一些元素
JSONArray jsarray_com = new JSONArray();
jsarray_com.put("One");
jsarray_com.put("Two");
final JSONArray jsarray_com = new JSONArray();
现在来讨论PMD建议的问题是将JSONArray声明为final
你能告诉我,如果它被宣布为决赛,你会得到什么好处吗
当我这样做的时候
JSONArray jsarray_com = new JSONArray();
jsarray_com.put("One");
jsarray_com.put("Two");
final JSONArray jsarray_com = new JSONArray();
代码运行良好。我猜您的意思是PMD中的规则:这只是一个优化问题:因为PMD注意到您的变量只分配了一次,它建议您可以将其声明为final,因为它将生成最佳代码
然而,我同意他的评论:这可能是一种古老的优化技术,但在现代JIT编译器中,它没有什么区别。我通常会关闭这个规则(或者至少忽略它)。声明最终成员和最终类是一种很好的做法,但声明最终局部变量或参数。。。psch 我猜您是指PMD中的规则:这只是一个优化问题:因为PMD注意到您的变量只分配了一次,它建议您可以将其声明为final,因为它将生成最佳代码
然而,我同意他的评论:这可能是一种古老的优化技术,但在现代JIT编译器中,它没有什么区别。我通常会关闭这个规则(或者至少忽略它)。声明最终成员和最终类是一种很好的做法,但声明最终局部变量或参数。。。psch PMD检测到
jsarray\u com
从未重新分配,因此建议在声明中添加final
,以明确这一事实。当您看到final
时,您立即知道jsarray\u com
将始终引用相同的对象。它使代码更容易理解,但您可以随意忽略该建议
在可能的情况下使用final
,也可能有助于JVM优化您的代码,尽管最后一点与此无关。事实上,大多数JVM都能够在没有用户任何输入的情况下解决这个问题,就像PMD一样
请注意,将变量声明为final
不会阻止您通过.put()
等方法修改对象。例如,你可以这样做:
jsarray_com.put("foo");
但不是这个:
jsarray_com = anotherarray_com;
PMD检测到
jsarray\u com
从未重新分配,因此建议在声明中添加final
,以明确这一事实。当您看到final
时,您立即知道jsarray\u com
将始终引用相同的对象。它使代码更容易理解,但您可以随意忽略该建议
在可能的情况下使用final
,也可能有助于JVM优化您的代码,尽管最后一点与此无关。事实上,大多数JVM都能够在没有用户任何输入的情况下解决这个问题,就像PMD一样
请注意,将变量声明为final
不会阻止您通过.put()
等方法修改对象。例如,你可以这样做:
jsarray_com.put("foo");
但不是这个:
jsarray_com = anotherarray_com;
你能分享一个更完整的片段,以及你从PMD得到的建议文本吗?我建议你关闭这个诊断。你能分享一个更完整的片段吗,以及从PMD得到的建议文本?我建议只关闭此诊断。这实际上是错误的:JIT编译器足够聪明,可以自行查看变量是否只分配了一次。这可能是Java1.4的合理优化,但不是现在。好的,谢谢你提供的信息。我只是引用了PMD正在做的事情,但我编辑了我的评论来添加你的观点。这实际上是错误的:JIT编译器足够聪明,可以自行查看变量是否只分配了一次。这可能是Java1.4的合理优化,但不是现在。好的,谢谢你提供的信息。我只是引用了PMD正在做的事情,但我编辑了我的评论来补充你的观点。