Comparar Strings no Java com o operador ==
em 04 de Setembro de 2020
O título deste artigo se refere a um erro muito comum cometido pelos iniciantes em Java, que advém do fato de não saberem trabalhar com membros estáticos (variáveis e métodos estáticos). Um atributo marcado com o modificador static tem o seu valor compartilhado por todos os objetos da classe, ou seja, só haverá uma cópia dele para todos os objetos da mesma classe. Por isso, não podemos trabalhar com membros não-estáticos de maneira "estática". A figura abaixo ilustra a diferença entre variável não-estática (também conhecida como variável de instância) e variável estática (também conhecida como variável de classe).
Repare que a classe B possui uma variável estática field2, e todos os objetos (T1, T2 e T3) criados a partir desta classe possuem o mesmo valor para field2, devido isto estar compartilhado entre todas as instâncias. Em contraste, a classe A possui uma variável não-estática field1 exclusiva para cada objeto criado (P1, P2 e P3), isto significa que o valor de uma variável não-estática não é compartilhado entre as instâncias da classe.
Métodos também podem ser definidos como estáticos. Um método estático pode ser invocado diretamente pela própria classe, sem a necessidade de criar uma instância da classe, ou seja, sem precisar criar um objeto. Seguindo o mesmo conceito de variáveis estáticas, métodos estáticos pertencem a classe, e não a instância da classe, e por isso são conhecidos como métodos de classe. Os métodos estáticos são comumente utilizados para acessar variáveis estáticas, e métodos estáticos não podem acessar membros não-estáticos da classe. Aí que está o erro que comumente iniciantes em Java cometem, conforme ilustra o código a seguir.
public class HelloWorld {
private String saudacao = "Olá Mundo!";
public static void main(String[] args) {
System.out.println(saudacao);
}
}
Temos a famosa função estática main, que é um membro da classe HelloWorld, tentando acessar a variável não-estática "saudacao". Este código nem compila! O erro de compilação “Cannot make a static reference to the non-static field saudacao” indica que não podemos fazer uma referência estática para a variável não-estática. Portanto, nem todas as combinações entre membros de classe e de instância são permitidas.