Problemas com List list1 = Arrays.asList(monica); em um array CHAR

6 respostas
jbpjava

Galera alguém sabe me responder pq quando tento adicionar um array de caracteres em List (list1) ele transforma o resultado em [[C@119298d] [[C@f72617] [[C@1e5e2c3] ???

O objetivo era dar um shuffle no char[] monica mas em list1 ele se transforma nesses numeros.

String texto = "java power super";
  StringTokenizer quebra = new StringTokenizer(texto);
  while (quebra.hasMoreTokens()) {
  String cebolinha = quebra.nextToken();
  char[] monica = cebolinha.toCharArray();  //Transformo em um array de caracteres.
   
  List list1 = Arrays.asList(monica);
  System.out.println("****list1****: " + list1); // imprime [[C@119298d] [[C@f72617] [[C@1e5e2c3]
   
  Random rand = new Random();
  Collections.shuffle(list1, rand);
  System.out.print(list1);

6 Respostas

luistiagos
se tiver usando o java 5 nesta linha: List list1 = Arrays.asList(monica);

troque para isto List <Character>list1 = Arrays.asList(monica);

pois um List nao aceita tipos primitivos como char apenas objetos e wrapers caso nao estaja usando java 5 tenta usar o array pra dar o sluffer ou apos transformar o array em List faça um for dando cast para Charactere
M

Lembre que em uma lista só entram objetos, como char é tipo primitivo, ele acaba sofrendo um boxing pra Character.
Então quando você chamou a lista ela chamou o método toString() de cada objeto Character, como eles têm o método toString() da classe Object imprimem somente getClass().getName() + ‘@’ + Integer.toHexString(hashCode()).
O ruim de auto-boxing é que as vezes essas conversões acontecem sem a gente perceber e além dessas confusões entre primitivo e objeto se vc não toma cuidado acaba criando um overhead do cacete.

jbpjava

Depois de dois dias tentando de tudo, deu certo !
Adicionei cada elemento ao List ao invés de adicionar o array inteiro como é feito com Object e como eu estava fazendo acima.

List list2 = new ArrayList(monica.length); for (int j = 0; j < monica.length; j++) { list2.add(monica[j]); } Random rand = new Random(); Collections.shuffle(list2, rand); System.out.print(list2);
Valeu galera pela força ! :wink:

ViniGodoy

Dica: Sempre que postar código, use a tag code por favor. Se não sabe fazer isso, leia esse tópico:
http://www.guj.com.br/posts/list/50115.java

jvnnior

Ola Pessoal, sou novo no forum, e ja tenho um probleminha aqui nas minhas maoes…é o seguinte !

Apos ter feito uma Brigde entre uma Dll (COM+) feita em Delphi e java, eu consigo chamar meus métodos sem problema nenhum.
Porem…alguns métodos (function), possuem seu retorno tipo Variant, que são suportado por outras linguagem, tipo vb etc. Só que o java, quando fez a Bridge do com+, pegou todos os meus retorno tipo Variant e colocou para Object…

Problema…

Tenho uma funcao chamada ADDRESS_NORMALIZATION, e ela me retorna um tipo Object… ja tentei colocar ele dentro uma List da java.util, tentei converter para array de byte e etc…o que voces me sugerem a fazer
[img]

ViniGodoy

Oi.

Não pegue carona em outros tópicos. Quando o seu assunto for outro, crie seu próprio tópico.

Tente descobrir qual é o tipo do objeto que o com te retorna, para poder fazer um cast. Geralmente você descobre isso na documentação.

Ou use o seguinte truque. Dê um System.out.println(objeto.getClass().getName()) para ver a classe real do objeto. E daí faça o cast e veja se consegue usa-la.

Criado 20 de novembro de 2007
Ultima resposta 20 de nov. de 2007
Respostas 6
Participantes 5