Testei aqui e deu isso mesmo… mas pq a segunda opção deu false???
Um objeto.toString() é sempre igual a ele mesmo.toString() nao é??? :?
thadeurc
Eu testei utilizando java i.5 e deu false, false.
Acho que dá false pelo fato de que ele cria as Strings quando chamamos o toString e elas não estão no pool de String. Ele utiliza (provavelmente) new String() creio eu.
Rafael_Nunes
Testei com a 1.4.2 e deu true, false.
Não entendi por que o segundo é false. Se ambos serão Strings “1.0”.
J
jehjeh
testei com 1.4.1 e deu false, false
danieldestro
Realmente não entendí pq o primeiro dá true e o segundo dá false (JDK 1.4.2).
thadeurc
O fato de ele dar true ou false no primeiro não está relacionado com a comparação feita utilizando “==” para objetos comparar o endereço de memória??? é uma resposta não confiável vendo que estamos querendo comparar conteúdos. Se não me engano no Core java (ou no Deitel, nao me lembro ao certo) eh feito um alerta que quando utilizamos “==” para comparar Strings pode dar “problema”. Sei que ele retorna true se as Strings estiverem sido criadas sem o uso do new String. POis elas estarao no Pool certo??
andre_a_s
Mas ele criou os objetos do mesmo jeito!
Como pode funcionar pra um e nao para o outro???
Integer i1 = new Integer(1);
Double d1 = new Double(1); :?
Pau da JVM mesmo??? :x
Sami_Koivu
Dando uma olhada no código fonte do java.lang.Integer que eu tô usando talvez ajuda um pouco:
Ele retorna Strings não criados com new String(…) em alguns casos mais comuns(de -3 até 10 e tambem -[telefone removido]). E assim retorna true, false com meu java pelo razões ditas pelo thadeurc.
Depende da implementação do Integer.toString(). Se ele sempre retorna o mesmo objecto String para o número 1 ou não.
E o classe Double aparentemente sempre cria um novo objeto String
Muito interessante, isso, Fabrício.
-Sami
Sami_Koivu
andre_a_s:
Mas ele criou os objetos do mesmo jeito!
Como pode funcionar pra um e nao para o outro???
Integer i1 = new Integer(1);
Double d1 = new Double(1); :?
Pau da JVM mesmo??? :x
Os objetos Integer e Double são criados mais ou menos do mesmo jeito, mas a comparação é entre os objetos String. Que são criados(ou não) nos metodos Integer.toString() e Double.toString().
Ou seja: Ambos seriam false se não fosse pelo código do Integer.toString() que sempre retorna o mesmo String “1” em alguns versões do java.
danieldestro
Muito tosco isso.
thadeurc
Concordo em com o daniel… muito tosco… tomara que questões como esta não caiam em provas pois deve dar dor de cabeça
danieldestro
Isso nem deveria cair na prova. Foge dos objetivos do SCJP.
Sami_Koivu
Ah, com certeza não vai cair na prova real, não.
-Sami
Fabricio_Cozer_Marti
Acho bizarro isso mesmo … sem lógica alguma!
Mas tomare que essa não caia na minha!!!
Canhoto!! olhando aqui na lista de Objetivos da prova:
na Section 8: Fundamental Classes in the java.lang Package
… , and writing code using the follwing methods of the wrapper classes (e.g Integer, Double, etc.):
[list]doubleValue[/list]
[list]floatValue[/list]
[list]intValue[/list]
[list]parseXxx[/list]
[list]getXxx[/list]
[list]toString[/list]
[list]toHexString[/list]
Eu testei utilizando java i.5 e deu false, false.
Aí sim concordo …
danieldestro
Mas saber da implementação do toString() para cada wrapper diferente, seria impossível.
Fabricio_Cozer_Marti
impossível não seria, mas que ia dar um trabalhão pra saber pra cada wrapper diferente e pra cada versao da jvm da 1.4, como o toString e os outros métodos são implementados, ia !!!
Ao meu ponto de ver, acho q eles deveriam retornar a String que está no pool! assim seria padrão o toString() para as wrappers, só chamaria o método intern(), e no final … mas de qualquer forma isso sendo tosco, ou interessante, acho q é bom saber.