Dúvida String

6 respostas
I

Pessoal, sei q os dois códigos abaixo são válidos:

String teste = "";

String teste = new String(); teste = "";
Mas não consigo entender, pq a String funciona sem inciá-la com ‘new’.

Outro código também que estou tendo dúvida e não tá dando certo é o seguinte:

char [] k; //k já está populado. String teste = k.toString();
A saída da uma coisa totalmente diferente do que tem dentro de k. pq?

Valeu

6 Respostas

T

inicjava:
Pessoal, sei q os dois códigos abaixo são válidos:

String teste = "";

String teste = new String(); teste = "";
Mas não consigo entender, pq a String funciona sem inciá-la com ‘new’.

teste = “” quer dizer, ao pé da letra:

  • O compilador reserva espaço para a constante String “”
  • Quando a classe for carregada, a constante String “” é instanciada (com “new”), mas isso é feito “por debaixo dos panos”
  • Essa constante é então atribuída à variável “teste”.


Outro código também que estou tendo dúvida e não tá dando certo é o seguinte:

char [] k; //k já está populado. String teste = k.toString();
A saída da uma coisa totalmente diferente do que tem dentro de k. pq?
Valeu

Não use “toString” com arrays. O resultado é sempre algo esquisito, como “[C@39434” ou alguma coisa estranha, que começa com “[”.
No seu caso você precisaria fazer:

String teste = new String (k);
I

ah blz, vlaeu thingol!
Na minha segunda pergunta, eu acabei concatenando as partes do vetor, mas suponha que exisita algo + conveniente srsrs valeu mesmo

airton.asg

poss oestar errado… mas o problema de estar saido uma coisa totalmente diferente do que esta em k, nao seria pq ele esta convertendo o Vetor em seu todo, ao inves e converter um determinado valor em K

tipo… k[i].toString();
ou senao … para imprimir a streing toda de um array de char… usar no modelo q o Moderador (acima disse)

Caso eu esteja errado, desculpe minha ignorancia… nao testei o que falei…

airton.asg

poss oestar errado… mas o problema de estar saido uma coisa totalmente diferente do que esta em k, nao seria pq ele esta convertendo o Vetor em seu todo, ao inves e converter um determinado valor em K

tipo… k[i].toString();
ou senao … para imprimir a streing toda de um array de char… usar no modelo q o Moderador (acima disse)

Caso eu esteja errado, desculpe minha ignorancia… nao testei o que falei…

Fabiano

airton, é bem isso mesmo que acontece. Quando tenta-se converter qualquer objeto ou array em uma string o resultado normalmente é algo como o thingol expôs. O java não concatena todos os valores em uma linha, transforma seu resultado naquela coisa estranha. Eu me bati um monte para fazer digester e criptografia de senhas (até entender como as coisas funcionam leva um certo tempo né? heheheh)

[]s

P

O metodo toString, apesar do nome, não é utilizado para converter o oobejto em string, mas sim exibir em uma string detalhes sobre ele.

no caso do array, que é um objeto, o metodo toString , exibi detalhes do obejto array e não dos dados contido nele.

o metodo toString é herdado da classe Object, então tds objetos, possuem tal metodo. Qdo vc não subscreve este metodo, o metodo da classe pai, no caso Object, é chamado, e sua implementalção exibe o hash code do objeto

[url]http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()[/url]

Apenas como curiosidade, segue a implementação do metodo toString da Classe Object do projeto classpath
/**
   * Convert this Object to a human-readable String.
   * There are no limits placed on how long this String
   * should be or what it should contain.  We suggest you
   * make it as intuitive as possible to be able to place
   * it into {@link java.io.PrintStream#println() System.out.println()}
   * and such.
   *
   * <p>It is typical, but not required, to ensure that this method
   * never completes abruptly with a {@link RuntimeException}.
   *
   * <p>This method will be called when performing string
   * concatenation with this object.  If the result is
   * <code>null</code>, string concatenation will instead
   * use <code>"null"</code>.
   *
   * <p>The default implementation returns
   * <code>getClass().getName() + "@" +
   *      Integer.toHexString(hashCode())</code>.
   *
   * @return the String representing this Object, which may be null
   * @throws OutOfMemoryError The default implementation creates a new
   *         String object, therefore it must allocate memory
   * @see #getClass()
   * @see #hashCode()
   * @see Class#getName()
   * @see Integer#toHexString(int)
   */
  public String toString()
  {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
  }
Criado 7 de março de 2007
Ultima resposta 7 de mar. de 2007
Respostas 6
Participantes 5