Em uma classe típica de validador spring mvc, ao inserir um valor errorCode no objeto Errors, que diferença faz entre usar um String ( props.somefield.req
) como esse
errors.rejectValue("elementId", "props.somefield.req");
versos uma String final estática declarada?
private static final String SOMFIELD_REQ = "props.somefield.req"; ...
errors.rejectValue("elementId", SOMFIELD_REQ);
Isso melhora o desempenho, mesmo que de maneira mínima? Eu li algumas perguntas sobre estouro de pilha ( String e final , faz sentido definir uma String final em Java? ), Mas ninguém conseguiu responder a essa pergunta de atualização de perguntas.
java
programming-practices
variables
final
happybuddha
fonte
fonte
Respostas:
Em tempo de execução, isso não faz diferença.
O ponto é a legibilidade - como uma variável membro, ela provavelmente é declarada no início do código fonte da classe e, tornando-a estática, significa que ela não precisa ser alocada para cada nova instância da classe.
Tornar final significa para o leitor que o valor não será alterado (para o compilador também, mas isso é menos importante aqui).
Dessa forma, não há "valores mágicos" ocultos na implementação e, se uma alteração for desejada na "constante", ela só precisará ser alterada em um único local.
Isso basicamente imita o que um programador C faria com um #define.
fonte
final
campos têm muitos benefícios!Declarar campos como
final
possui benefícios valiosos de documentação para desenvolvedores que desejam usar ou estender sua classe - não apenas ajuda a explicar como a classe funciona, mas também ajuda a ajuda do compilador na aplicação de suas decisões de design. Diferentemente dosfinal
métodos, declarar um campo final ajuda o otimizador a tomar melhores decisões de otimização , porque se o compilador sabe que o valor do campo não será alterado, ele pode armazenar em cache com segurança o valor em um registro .final
Os campos também fornecem um nível extra de segurança, fazendo com que o compilador imponha que um campo seja somente leitura.Não tente usar
final
como uma ferramenta de gerenciamento de desempenho. Existem maneiras muito melhores e menos restritivas de melhorar o desempenho do seu programa. Usefinal
onde ele reflete a semântica fundamental do seu programa: para indicar que as classes devem ser imutáveis ou que os campos devem ser somente leitura.Antes de declarar os campos finais, você deve se perguntar: esse campo realmente precisa ser mutável?
fonte