public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject; <<<====Minha duvida
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
class Teste{
public static void main(String[] args) {
String s1 = "Teste1";
String s2 = new String("Teste1");
if(s1 == s2){
System.out.println("Elas são objetos iguais");
}
if(s1.equals(s2)){
System.out.println("Elas batem com o mesmo conteudo");
}
}
}
Tenho a seguinte duvida no metodo equals() da classe String que começa no segundo "if" quando ele testa se o objeto passado é do tipo String ....if (anObject instanceof String){...}. Ou seja, eu só entro nessa condição se o objeto for do tipo String, correto? E agora que vem minha duvida! Se eu já tenho certeza que o objeto passado é de uma instância do tipo String, porque então que ao criar anotherString eu simplesmente não faço isso?
String anotherString = anObject;
Pois anObject é uma String, se não ele nem entrava nessa condição que foi verificada pelo if. Por que eu ainda tenho que usar um cast, do tipo String em algo que já é uma String? Dessa forma.
String anotherString = (String)anObject;
Por favor! O que eu não percebi que eu estou tendo esse erro de pensamento.