Mais uma sobre Strings

9 respostas
F

Alguém sabe o que o código abaixo imprime ?

public class Teste {

public static void main(String args[]) {

String s1 = aaa;

s1.concat(bbb);

System.out.println(s1);

}

}

Cuidado ao bater o olho e ir respondendo, vc pode errar :slight_smile:

9 Respostas

boaglio

Deve imprimir “aaa” pq as Strings são imutáveis.

marciolx

o que o código abaixo imprime?

public class TString1 {
	public static void main (String [] args) { 
		String s = new String("teste");
		String x = s.toString();
		System.out.println("reference equality: " + (s==x));
		System.out.println("object equality: " + (s.equals(x)));
	}
}
carbaldi

Oi galera,

A resposta é true e true. Embora a String seja imutável, e x seja uma nova instancia (diferente de s).
O java para otimizar cria um pool de string e quando vc faz a referencia de x = s.toString() ou até se alterasse seu codigo para:

String s = "teste"; 
String x = "teste"; 
System.out.println("reference equality: " + (s==x)); 
System.out.println("object equality: " + (s.equals(x)));
Ele usa o pool e a resposta seria true e true.
Se vc não quer utilizar o pool vc pode trocar o codigo para:
String s = "teste"; 
String x = new String("teste"); 
System.out.println("reference equality: " + (s==x)); 
System.out.println("object equality: " + (s.equals(x)));
Assim a resposta seria false e true.

Abrços

F
O que acontece no meu código de exemplo, para explicar melhor é o seguinte:

O método concat() retorna uma nova String. Portanto o s1 não muda nunca, continua sendo aaa.

Se colocássemos na linha o seguinte:

String s2 = s1.concat(bbb);

System.out.println(s2);

aí imprimia “aaabbb”, pois s2 recebe o novo objeto String retornado da chamada ao método concat()

Agora no código do Márcio, imprime true e true :slight_smile:

urubatan

false

por que o = é resolvido antes do equals :slight_smile:

R

pessoal, qual a diferença entre eu declarar dentro de um metodo, o seguinte:

‘public void main(String[] args)’ e ‘public void main(String args[])’ ?

Rafael_Steil

Tirando a visual/estetica, nao ha diferenca alguma.

Rafael

P

me explica um negócio, qual a diferença de:
String x = s.toString();

para:

String x = s;

Por acaso no primeiro eu estou igualando o conteúdo da String e no segundo a referência?
Valew.

marciolx

no exemplo que eu postei o método toString() não deveria retornar um novo objeto String?

Criado 16 de maio de 2003
Ultima resposta 19 de mai. de 2003
Respostas 9
Participantes 8