Dúvida sobre String

2 respostas
N

Olá, pessoal. Estou aproveitando meus horários de folga pra tentar finalmente entender um pouco sobre Java. Por conta própria é sempre muito complicado, mas vou conseguir… =)
Estou com uma dúvida que com certeza é básica, mas realmente não consigo entender.

Por quê quando faço essa chamada o compilador Java não reclama que o objeto não foi instanciado?

String departamento = "ferramentas";

Pro compilador existe alguma diferença se eu fizer a declaração da seguinte forma?

String departamento = new String("ferramentas");

Acreditem, pra uma pessoa que está começando agora, faz muito mais sentido usar a String com o “new”, afinal não é um objeto?

Agradeço muito a ajuda!

2 Respostas

E

Novato_ABC:
Olá, pessoal. Estou aproveitando meus horários de folga pra tentar finalmente entender um pouco sobre Java. Por conta própria é sempre muito complicado, mas vou conseguir… =)
Estou com uma dúvida que com certeza é básica, mas realmente não consigo entender.

Por quê quando faço essa chamada o compilador Java não reclama que o objeto não foi instanciado?

String departamento = "ferramentas";

Pro compilador existe alguma diferença se eu fizer a declaração da seguinte forma?

String departamento = new String("ferramentas");

Acreditem, pra uma pessoa que está começando agora, faz muito mais sentido usar a String com o “new”, afinal não é um objeto?

Agradeço muito a ajuda!

a) Ele não reclama, porque o objeto foi instanciado, mas não pelo sua classe, e sim pelo programa (Java Classloader) que carregou a sua classe. Esse objeto String tem a seguinte propriedade: se outro objeto String com o mesmo conteúdo já existir em alguma das classes que foram carregadas pelo programa, então o objeto é reaproveitado (não quer dizer que a variável é reaproveitada. Lembre-se, variáveis são variáveis e objetos são objetos. Um objeto pode ser referenciado por várias variáveis, mas uma variável não pode referenciar vários objetos. Ela pode referenciar zero ou 1 objetos.

b) Sim, tem muita diferença, porque você está explicitamente solicitando que se instancie um novo objeto, em vez de reaproveitar um pronto.

c) Evite ao máximo usar “new String”, exceto no caso em que você vai criar um novo objeto String a partir de um char[]. Em todos os outros casos, é aconselhável não usar “new String”. *

  • Ok, há um caso em que se usa o construtor “new String (byte[], String)”. Esse construtor pode ser usado, mas não é aconselhável usar o construtor “new String(byte[])” por motivos que você irá aprender (talvez por uma amarga experiência) mais tarde.
N

entanglement, agradeço muito a sua ajuda. Estou com 2 livros aqui e nenhum deles me deu uma explicação clara como essa. Valeu.

Criado 21 de junho de 2010
Ultima resposta 21 de jun. de 2010
Respostas 2
Participantes 2