Sei que é um assunto já bem “batido”, mas eu não consegui entender uma coisa… Eu sei que o java passa os parâmetros sempre por valor, o que acontece é que ele passa o valor da referência. Mas então, pq o resultado desses meus testes não têm o msm comportamento?!
Código 1:
[code] public static void main(String[] args) {
	String a = new String("Sou A");
	System.out.println(a);
	
	muda(a);
	System.out.println(a);
}
private static void muda(String s){
	s = "Sou B";		
}
[/code]Ele imprime:
[quote]Sou A
Sou A[/quote]
Código 2:
[code] public static void main(String[] args) {
	JFormattedTextField a = new JFormattedTextField("Sou A");
	System.out.println(a.getText());
	
	muda(a);
	System.out.println(a.getText());
}
private static void muda(JFormattedTextField s){
	s.setText("Sou B");		
}
[/code]
Imprime:
[quote]Sou A
Sou B[/quote]
Ok! Agora me digam, pq???
Pra mim os dois deveriam agir como o Código 2.
Fiz vários testes, fiz com que o método muda recebesse um Component (entao o resultado foi como no código 2). Então fiz com que o método recebesse um Object e o resultado foi como o do código 1. Ai permaneci com o parâmetro do tipo Object, só que invés de uma String, enviei um StringBuilder e o resultado foi como no 2.
Por favor, alguém pode me explicar isso melhor?!  
