Dúvida sobre passagem de parâmetros

3 respostas
V

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!

3 Respostas

tnaires

Duas considerações:

  1. Strings são imutáveis;
  2. O endereço apontado pela referência é passado por valor. Você poderia mudar o conteúdo do objeto ( não nesse caso, devido a 1) ).
V

tnaires:
Duas considerações:

  1. Strings são imutáveis;

imutáveis em qual sentido?
Desculpe mas não entendi!

Em qual exemplo você tá falando, no segundo?

V

Pessoal, já dei uma lida aqui e entendi aonde estava o problema.

Muito obrigado ao usuário tnaires pela dica da String ser imutável, lembro que a minha professora de POO citou isso na sala, mas já faz muito tempo e então meu garbagge collector passou e jogou tudo fora, rs…

Podem fechar o tópico!

Criado 26 de agosto de 2008
Ultima resposta 26 de ago. de 2008
Respostas 3
Participantes 2