Minha dúvida é a seguinte: Quando eu armazenar Strings num Vector, por exemplo, posso recuperá-las tanto através de String.valueOf(lista.elementAt(i)) quanto blista.elementAt(i)[/b]. Gostaria de saber qual a diferença entre fazer de uma ou outra maneira, e qual a mais recomendada nessa situação…
e se vc fizer um cast para string (String)lista.elementAt(i) pode ser que de ClassCastException, se for outro tipo.
já o String.valueOf aceita inclusive Object como argumento, e o toString() deste objeto será chamado para converter para String…
no seu caso como vc sabe que os elementos do Vector são Strings, e se não forem nulos vai dar na mesma (se nao tiver String nula)
felixcomputer
Bom, eu acho (apenas acho) que a melhor maneira é a primeira, pq na primeira vc usa um método da class String que converte o lista.elementAt(i) para String, que poderia ser qualquer outra coisa, int, long, e na segunda vc está forçando um casting com o (String). Como vc disse, dá no msm, mas na minha opinião, eu preferiria o primeiro,
J
jairelton
Só uma correção, na realidade não lança NullPointerException, retorna “null”.
E nesse caso não faz diferença alguma, o problema é só se você inserir um objeto que não seja String no Vector, aí vai lançar ClassCastException na segunda opção.
Recomendo de use Generics e elimine as duas:
Vector<String> lista = new Vector<String>();
//...
String str = lista.elementAt(i);
rodrigoallemand
Não há diferença na programação… a diferença está na criação de objetos…
String é imutavel (não se altera) e utiliza um pool especifico na JVM.
Quando vc cria via String.valueOf(XXX), vc tentará criar uma outra String que provavelmente já está disponivel no pool. Já pelo Cast, a JVM fará apenas uma checagem se o objeto retornado pode ser castiado para String… Lembrando que o segundo caso pode levantar uma CCE caso o atributo esteja nulo ou não seja do tipo String.
ricardolecheta
Verdade eu confundi com
System.out.println(String.valueOf(null));
que chama o valueOf(char[]) e lança NPE.
java_child
Entendi… então creio que seja melhor fazer o cast nesse caso, pois eu tenho certeza absoluta que o Vector só possui elementos String… E achei muito interessante esse Generics, vou tentar utilizá-lo…
Em questão de memória e desempenho, o Generics apresenta alguma desvantagem em relação um Vector de Object?