CodeGym /Cursos /Sintaxe do Java /Variáveis de referência

Variáveis de referência

Sintaxe do Java
Nível 2 , Lição 6
Disponível

"Oi, amigo, sou eu de novo, Ellie. Desculpe por dizer isso repetidamente, mas é comum na Terra no século 31. Gostaria de fornecer mais detalhes sobre variáveis ​​de referência e passagem de variáveis ​​de referência para funções ( métodos)."

"Estou pronto."

"Ótimo, então ouça. As variáveis ​​de referência são quaisquer variáveis ​​não primitivas. Essas variáveis ​​contêm apenas uma referência de objeto (uma referência a um objeto)."

"As variáveis ​​primitivas contêm valores, enquanto as variáveis ​​de referência armazenam referências a objetos ou nulos. Estou certo?"

"Absolutamente."

"O que é uma referência?"

"A relação entre um objeto e uma referência de objeto é como a relação entre uma pessoa e seu número de telefone. O número de telefone não é a pessoa, mas pode ser usado para ligar para a pessoa, pedir alguma informação, gerenciá-la ou dar ordens. Uma referência também é usada para trabalhar com objetos. Todos os objetos interagem uns com os outros usando referências."

"Como se eles estivessem falando um com o outro pelo telefone?"

"Exatamente. Quando uma variável primitiva é atribuída, o valor é copiado. Se uma referência é atribuída, apenas o endereço do objeto (o número de telefone) é copiado. O objeto em si não é copiado. "

"OK, entendi."

"Uma referência oferece mais um benefício: você pode passar uma referência de objeto para qualquer método, e esse método poderá usar a referência para modificar (alterar) o objeto chamando seus métodos e acessando os dados dentro do objeto."

Exemplo 1
Os valores m e n não mudam aqui.
public class References
{
  public static void main (String[] args)
  {
    int m = 5; int n = 6;

    System.out.println("M=" + m + " N=" + n);
    swap(m, n);
    System.out.println("M=" + m + " N=" + n);
  }

  private static void swap(int a, int b)
  {
    int c = a;
    a = b;
    b = c;
  }
}
E aqui está o porquê.
Este código é análogo ao código à esquerda
public class References
{
  public static void main (String[] args)
  {
    int m = 5; int n = 6;

    System.out.println("M=" + m + " N=" + n);
    int a = m, b = n;

    int c = a;
    a = b;
    b = c;

    System.out.println("M=" + m + " N=" + n);
  }
}

"Apenas os valores 5 (m) e 6 (n), respectivamente, são atribuídos às variáveisaeb;aebnão sabem nada sobre (e não influenciam de forma alguma) m e n."

"Para dizer a verdade, agora percebo que não entendi nada. Você pode me dar mais alguns exemplos?"

"Com uma referência de objeto, poderíamos ter feito o seguinte:"

Exemplo 2
Os dados dos objetos mudam neste código
public class Primitives
{
  public static void main(String[] args)
  {
    Student jen = new Student(); jen.name = "Jen"; jen.age = 21; Student beth = new Student(); beth.name = "Beth"; beth.age = 15;

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);

 ageSwap(jen, beth);

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);
  }

  private static void ageSwap(Student a,
                                    Student b)
  {
    int c = a.age; a.age = b.age; b.age = c;
  }

  static class Student
  {
    String name;
    int age;
  }
}
E aqui está o porquê.
Este código é análogo ao código à esquerda
public class Primitives
{
  public static void main(String[] args)
  {
    Student jen = new Student(); jen.name = "Jen"; jen.age = 21; Student beth = new Student(); beth.name = "Beth"; beth.age = 15; 
    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);

    Student a = jen, b = beth;

    int c = a.age; a.age = b.age; b.age = c;

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);
  }





  static class Student
  {
    String name;
    int age;
  }
}

"As referências a jen e beth, respectivamente, são atribuídas às variáveis ​​a e b; a e b alteram os valores dentro dos objetos jen e beth."

"E você pode declarar classes dentro de outras classes, certo? Legal!"

"Mas eu ainda não entendo todo o resto muito bem."

"Tudo no devido tempo."

Comentários (5)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Gabrielly Nível 3, Brazil
9 julho 2024
To entendendo é mais nada
Pedro Lucas Nível 3, Currais Novos, Brazil
24 setembro 2024
Desistiu?
WilliamPez Nível 4, Campo Bom, Brazil
3 junho 2024
Está se tornando mais dificil. Mas vamo la!
Tiago Rodrigues Nível 3, Brazil
12 maio 2024
complicou nao to entendendo nada agora.
edgleisonRD Nível 5, Brazil
13 abril 2024
Ninguém aprendendo nessa data?