Acho, em minha opinião, que o Gosling comeu bola quando definiu a classe String e redefiniu apenas o operador "+".
Ele deveria ter redefinido "==", "!=", "<", "<=", ">", ">=" também.
Uma boa parte dos problemas com os iniciantes em Java é que o "==" não funciona direito com Strings.
Talvez isso para mostrar a coerência mostrando que String é um Object e possui as características do tal. Mas concordo plenamente com você thingol. Já que a classe String é cheia de “não me toque” =) bem que ele poderia ter feito a redefinição dos operadores mesmo.
Boa parte desse tipo problema seria resolvido em bem menos tempo.
[quote=thingol]Acho, em minha opinião, que o Gosling comeu bola quando definiu a classe String e redefiniu apenas o operador "+".
Ele deveria ter redefinido "==", "!=", "<", "<=", ">", ">=" também.
Uma boa parte dos problemas com os iniciantes em Java é que o "==" não funciona direito com Strings. [/quote]
Na verdade isso serve para qualquer objeto, pois o seguinte código:
public class Teste
{
public static void main(String[] args)
{
Integer um = Integer.valueOf(1);
Integer dois = new Integer(1);
if(um == dois)
{
System.out.println("Iguais!");
}
else
System.out.println("Diferentes!");
}
}
Imprime “Diferentes” também. Eu até gosto do padrão do Java de que == significa o mesmo objeto, e não conteúdos iguais!
Especialmente pq String é uma classe que mais se parece com um tipo primitivo.
Para um iniciante é muito difícil entender que ele pode fazer:
String x = “Nova String”; (No lugar de String x= new String(“x”);
E:
String y = x + x; (No lugar de y = x.concat(x));
Mas não pode fazer o == para comparação…
Fora o fato de que comparar com o == dá certo às vezes, por causa do pool interno do java (não necessariamente por causa do conteúdo da String)… Aí fica ainda mais difícil de explicar porque daquela última vez o exercício que ele fez passou e dessa vez não…
Pior é quando vc pode fazer assim:
IF( a = b) THEN …
Acho legal que == é para objeto e equals conteúdo. Poderia ser == para conteúdo e === para objeto também, desde que ficasse separado = de == de === de equals.
Acho natural…
Imaginem se fosse o caso do “==” para comparação de duas Strings…
Dai teria um monte de gente reclamando que a classe String não suporte comparação de dois objetos…
Sei se so to colocando lenha na fogueira… mas java na sua essência tende a fazer com que tenha suporte a tudo, mesmo que isso complique um pouco
E ainda, temos que dar graças a deus de não serem char[].