Em Java todos os parametros são passados por valor.
J
jaireltonPJ
Basicamente, isso não existe em Java, como já foi dito, todos os parametros são passados por valor!
S
sakuraiPJ
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.
L
luBSPJ
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
publicclassTeste{publicStringvalor;publicstaticinta(Testex){x.valor="alterado em a";return1;}publicstaticintb(Testex){x=newTeste();x.valor="alterado em b";return2;}publicstaticvoidmain(Stringargs[]){Testex=newTeste();x.valor="sem valor";inty=a(x);System.out.println("valor: "+x.valor+" - retorno do método:"+y);intz=b(x);System.out.println("valor: "+x.valor+" - retorno do método: "+z);}}
Como eu faço para que meu método TestaRef altere a string sAux ?
Do jeito que o código está não funciona. A string sAux fica sempre com
“nao alterou”.
Obrigado.
L
luBSPJ
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!!
E
ErkoPJ
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!!
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:
S
SchuenemannPJ
“growth”:
Fui infeliz no exemplo que forneci.
Eu realmente preciso do retorno do parâmetro do método e do retorno do método.