Dúvida sobre String

1 resposta
camillabrasilia

Não entendi o que aconteceu na mensagem:
http://www.guj.com.br/forum/viewtopic.php?t=8596

public class teste { 
	public static void main(String[] args) { 
		String space = " "; 
		String composite = space + "hello" + space + space; 
		composite.concat("world"); 
		String trimmed = composite.trim(); 
		System.out.println(trimmed.length()); 
	} 
}

Irá imprimir 5, pois Strings são imutáveis, portanto ele não concatena o “world”.

Criei uma nova classe para expressar melhor a minha dúvida:

1 public class Teste { 
2	public static void main(String[] args) { 
3		String space = " "; 
4		String composite = space + "hello" + space + space; 
4		System.out.println(composite.concat("world"));
6		String trimmed = composite.trim(); 
7		System.out.println(trimmed.length()); 
8	}
9 }

Esta classe irá imprimir:
" hello world "
5

Como String é imutavél ele imprime 5 que representa o hello sem os espaços da variável space, até aí tudo bem.
O proplema é o seguinte como ele concatena e imprime " hello world " na linha 4 se ele é imutável e depois imprime 5?

Agradeço a todos que me poderem tirar esta dúvida e me falar mais sobre String ser imutável.

1 Resposta

Luca

Olá

Exemplo 1:
Imprime 5
porque imprime String trimmed depois de fazer trim() em composite que NÃO foi concatenada com “world”. A instrução composite.concat(“world”); não retornou nada. (não há valor sendo atribuído do lado esquerdo do sinal de igual)

Exemplo 2:
Imprime 5
porque imprime trimmed que usou composite original já que no System.out.println(composite.concat(“world”)); concatenou uma String temporária e não alterou composite

String são imutáveis, se vc fizesse composite = composite.trim(); uma nova String seria colocada na referência composite e a porcão de memória aonde estava a String original passa a ser candidata a ser coletada pelo garbage collector.

Melhorou?

[]s
Luca

Criado 12 de fevereiro de 2004
Ultima resposta 12 de fev. de 2004
Respostas 1
Participantes 2