E aí pessoal, tudo bem?
Pois bem, estou fazendo a cadeira de Linguagem de Programação e hoje o assunto da aula foi a passagem de parâmetros nas linguagens.
Já sei que no Java é tudo por Valor, e que , quando eu passo uma variável do tipo não primitivo (classe, arrays, string), estou passando na verdade uma variável na memória que contém o ponteiro para o objeto. Assim, o programa cria uma cópia dessa referência na memória certo?
Pois bem, peguei um exemplo que demonstra muito bem isso, segue abaixo:
class EnvInt
{
int val;
public EnvInt()
{
val = 0;
}
public EnvInt(int x)
{
val = x;
}
}
public class TrocaValores2
{
static void trocaValores(EnvInt a, EnvInt b)
{
int aux;
aux = a.val;
a.val = b.val;
b.val = aux;
}
public static void main(String argv[])
{
EnvInt
envVal1 = new EnvInt(5),
envVal2 = new EnvInt(4);
System.out.println(envVal1.val);
System.out.println(envVal2.val);
trocaValores(envVal1, envVal2);
System.out.println(envVal1.val);
System.out.println(envVal2.val);
}
}
Neste exemplo , há a troca de valores , pois apesar das cópias das referências, ambas referenciam o mesmo objeto.
Agora peguei um outro exemplo que é praticamente idêntico a esse , porém passando uma String como parâmetro.Acontece que agora a alterção fica visível apenas ao escopo do método.
public class StringArg{
static void altera(String ps)
{
ps=ps + " e comprido";
System.out.println("Durante:" + ps);
}
public static void main(String[] args)
{
String s = new String("curto");
System.out.println("Antes:" + s);
altera(s);
System.out.println("Depois:" + s);
}
}
Para eu poder enxergar essa alterção fora , seria necessário que o método altera retornasse a String alterada.
Estou com essas dúvidas e hoje eu tenho que mandar um relatório para a professora!
Obrigado desde já pela ajuda!