Lembrado que quando vc passa um primitivo por parametro… vc passa os bits equivalentes ao valor desse primitivo…
Agora com Objetos vc passa os bits equivalentes a referencia desse Objeto.
O out da para vc fazer uma gambiarra (que por sinal nunca senti necessidade de fazer ehehe é meio feinho). Como o sakurai disse, para objetos é passado a referencia dele, logo eles apontam para mesma regiao de memoria (tipo ponteiro la no c) e se vc alterar um atributo desse objeto, vai alterar ele em toda parte (então vc pode usar o atributo com o out “xunxado”). Da uma olhada no exemplo abaixo, no método ‘a’ o parâmetro pode servir como um out a mais porque altera o atributo na referencia que foi passado, ja o método ‘b’ não serve, porque ele não altera o atributo na mesma referencia do objeto criado no main (e passado por parâmetro). Eu nunca estudei a fundo, mas esse deve ser um dos motivos que aconselham não se alterar atributos de objetos passados por parâmetro
public class Teste
{
public String valor;
public static int a(Teste x)
{
x.valor = "alterado em a";
return 1;
}
public static int b(Teste x) {
x = new Teste();
x.valor = "alterado em b";
return 2;
}
public static void main(String args[])
{
Teste x = new Teste();
x.valor = "sem valor";
int y = a(x);
System.out.println("valor: " + x.valor + " - retorno do método:" + y);
int z = b(x);
System.out.println("valor: " + x.valor + " - retorno do método: " + z);
}
}
Ah, da uma lida ali encima, acho que vc tem que fazer uma gambiarra daquelas, porque não da para alterar o atributo value do objeto String, o value ele é final… se tivesse um método como setValue, vc executaria dentro do seu método para a referencia do objeto String recebido por parâmetro e ai funcionaria, mas no seu caso qdo vc faz sTeste = “Alteração 1” é o mesmo que fazer sTeste = new String(“Alteração 1”), logo criou uma string nova na memoria e não alterou o valor da string que esta na região de memoria de sAux do main.
Kra…
SOMENTE os tipos primitivos são passados por VALOR, mas quando tu se refere a OBJETOS, 100% dos objetos são passados por REFERÊNCIA!
E olha q isso caia na SCJP EM!!
Kra…
SOMENTE os tipos primitivos são passados por VALOR, mas quando tu se refere a OBJETOS, 100% dos objetos são passados por REFERÊNCIA!
E olha q isso caia na SCJP EM!![/quote]
cara realmente é assim mesmo, a passagem de parametros são
por valor apenas para os tipos primitivos… os objetos são passados
por referência…
qualquer duvida basta pegar o codigo e debugar…
será visto claramente que isto ocorre de fato no java… :roll:
[quote=“growth”]Fui infeliz no exemplo que forneci.
Eu realmente preciso do retorno do parâmetro do método e do retorno do método.
[/quote]
Pra que você vai retornar o próprio i?