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?!