Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: Erroneous String Compare
Abstract
Strings devem ser comparadas com o método
equals()
, e não com ==
ou !=
.Explanation
Esse programa usa
Exemplo 1: A seguinte ramificação nunca deve ser usada.
Os operadores
==
ou !=
para comparar a igualdade de duas strings, o que compara a igualdade de dois objetos, e não seus valores. São boas as chances de que as duas referências nunca serão iguais.Exemplo 1: A seguinte ramificação nunca deve ser usada.
if (args[0] == STRING_CONSTANT) {
logger.info("miracle");
}
Os operadores
==
e !=
apenas se comportarão conforme esperado quando forem usados para comparar strings contidas em objetos que são iguais. A maneira mais comum de isso acontecer é internalizando as strings, processo pelo qual elas são adicionadas a um pool de objetos mantidos pela classe String
. Após a internalização de uma string, todas as suas aplicações usarão o mesmo objeto, e os operadores de igualdade terão o comportamento esperado. Todos os literais de string e constantes com valores de string são internalizados automaticamente. Outras strings podem ser internalizadas manualmente chamando String.intern()
, o que retornará uma instância canônica da string atual, criando uma se necessário.References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 597
desc.structural.java.code_correctness_erroneous_string_compare