Java 局部变量可以是最终变量

Java 局部变量可以是最终变量,java,final,local-variables,Java,Final,Local Variables,我使用该工具检查编码样式,并得到数百条建议: 局部变量“XXX”可以声明为最终变量 以下是我的一些代码: //Local variable 'cookies' could be declared final Cookie[] cookies = request.getCookies(); //Local variable 'cookie' could be declared final if (cookies != null) { for (Cookie cookie : coo

我使用该工具检查编码样式,并得到数百条建议:

局部变量“XXX”可以声明为最终变量

以下是我的一些代码:

//Local variable 'cookies' could be declared final    
Cookie[] cookies = request.getCookies();

//Local variable 'cookie' could be declared final
if (cookies != null) {

  for (Cookie cookie : cookies) {
  }
}

//Local variable 'qry' could be declared final
StringBuffer qry = new StringBuffer("from User u where u.account=? ");
这是否意味着我应该使用
final
like

 final Cookie[] cookies = request.getCookies();

首先,您应该了解Final的优点。如果我们将任何变量声明为最终变量,那么该变量就不能一次又一次地重新初始化。我猜,在您的代码中,这些变量初始化一次并多次使用。这就是工具建议将该变量声明为最终变量的原因


最终变量——初始化一次并多次使用

它建议,因为在本例中(在第一次调用
getCookies()
之后)您没有更改
cookies
,所以应该将其声明为
final

我会听取警告。如果这是您想要的,
final
提供了额外的保护,以防止程序(或您)尝试写入cookies(如果您不应该这样做)。

您是对的

声明变量是一种很好的做法,在程序执行期间,变量的值不会被更改为
final
。这将帮助您在编译时检测变量上的无效操作(更改值),并防止一些讨厌的bug潜入您的代码库。
这就是为什么许多代码样式工具在代码中突出显示这些变量,并建议将它们声明为
final

您使用的工具是什么?您了解final是什么吗?您可以使用它,因为您正在初始化变量,但您没有在那里初始化,然后必须在构造函数中初始化。(因为您没有进一步改变该值)