Qual é a diferença entre os métodos parseBoolean(String s) e valueOf(String s) da classe Boolean?
Eu estava vendo na documentação, e ambos fazem exatamente a mesma coisa. Ambos pegam a String s e verificam se ela não é null e se é, ignorando case, igual a “true”. Se for, então o método retorna true. Senão, retorna false.
Se elas fazem exatamente a mesma coisa, porque existem dois métodos? Tem que haver alguma diferença…
O mesmo ocorre com os pares Float.parseFloat()/Float.valueOf(), Double.parseDouble()/Double.valueOf() … Qual a diferença entre eles?
Posso estar enganado mas penso que a única diferença é que um retorna um boolean primitivo enquanto que o outro retorna um Boolean em forma de objecto.
É exatamente o que o colega falou. O parseBoolean retorna um boolean e o valueOf retorna um Boolean (de valor Boolean.TRUE ou Boolean.FALSE).
No caso dos outros, o parse irá retornar o número num tipo primitivo (double, float, etc.) e o valueOf irá fazer o seguinte:
Retornar um objeto já pré-criado e armazenado, caso o número varie de -127 até 128.
Retonar um novo objeto, caso o número esteja fora desse intervalor.
Portanto:
Float.valueOf(10) == Float.valueOf(10) mas
Float.valueOf(1000) != Float.valueOf(1000)
[quote=ViniGodoy]É exatamente o que o colega falou. O parseBoolean retorna um boolean e o valueOf retorna um Boolean (de valor Boolean.TRUE ou Boolean.FALSE).
No caso dos outros, o parse irá retornar o número num tipo primitivo (double, float, etc.) e o parse irá fazer o seguinte:
Retornar um objeto já pré-criado e armazenado, caso o número varie de -127 até 128.
Retonar um novo objeto, caso o número esteja fora desse intervalor.
Portanto:
Float.valueOf(10) == Float.valueOf(10) mas
Float.valueOf(1000) != Float.valueOf(1000)[/quote]
Nossa, essa implementação do valueOf é doida mesmo… :shock: ViniGodoy, tem alguma explicação para ser assim?
Segundo eles é uma otimização. É muito comum usar essa faixa de valores para índices básicos, que podem estar presentes num map. Portanto, não tem porque criar esses objetos múltiplas vezes.
Obviamente, mesmo que
Float.valueOf(1000) != Float.valueOf(1000)
Também observa-se que:
Float.valueOf(1000).floatValue() == Float.valueOf(1000).floatValue() e
Float.valueOf(1000).equals(Float.valueOf(1000));
Lembre-se == com objetos só compara se os dois referem-se à mesma posição de memória.