3. private static void testePassagemValorReferencia(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato = new Contato("Contato 2", "2345-6789", "contato2@email.com");
}
4. private static void testePassagemValorReferencia(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato = new Contato("Contato 2", "2345-6789", "contato2@email.com");
}
Contato contato = new Contato("Contato 1", "1234-4567", "contato1@email.com");
int valor = 10;
System.out.println(contato);
System.out.println(valor);
testePassagemValorReferencia(valor, contato);
System.out.println(contato);
System.out.println(valor);
5. private static void testePassagemValorReferencia(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato = new Contato("Contato 2", "2345-6789", "contato2@email.com");
}
Contato contato = new Contato("Contato 1", "1234-4567", "contato1@email.com");
int valor = 10;
System.out.println(contato);
System.out.println(valor);
testePassagemValorReferencia(valor, contato);
System.out.println(contato);
System.out.println(valor);
Qual a saída das variáveis valor e contato?
7. private static void testePassagemValorReferencia2(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato.setNome("Contato"+novoValor);
}
8. private static void testePassagemValorReferencia2(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato.setNome("Contato"+novoValor);
}
Contato contato = new Contato("Contato 1", "1234-4567", "contato1@email.com");
int valor = 10;
System.out.println(contato);
System.out.println(valor);
testePassagemValorReferencia(valor, contato);
System.out.println(contato);
System.out.println(valor);
9. private static void testePassagemValorReferencia2(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato.setNome("Contato"+novoValor);
}
Contato contato = new Contato("Contato 1", "1234-4567", "contato1@email.com");
int valor = 10;
System.out.println(contato);
System.out.println(valor);
testePassagemValorReferencia(valor, contato);
System.out.println(contato);
System.out.println(valor);
E agora? Qual a saída das variáveis valor e contato?
11. Contato contato = new Contato("Contato 1", "1234-4567", "contato1@email.com");
int valor = 10;
System.out.println(contato);
System.out.println(valor);
testePassagemValorReferencia(valor, contato);
System.out.println(contato);
System.out.println(valor);
Como funciona a passagem de parâmetros?
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
HeapStack/Pilha do programa
12. Como funciona a passagem de parâmetros?
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
Heap
private static void testePassagemValorReferencia2(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato.setNome("Contato"+novoValor);
}
contato @EDF67894
valor 10
Stack/Pilha do método
Stack/Pilha do programa
13. Como funciona a passagem de parâmetros? - Exemplo 1
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
Heap
private
valor
contato
}
contato @EDF67894
valor 10
Stack/Pilha do método
Stack/Pilha do programa
Uma cópia dos valores é
feita e variáveis valor e contato
são criadas com escopo do
método
14. Como funciona a passagem de parâmetros? - Exemplo 1
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
Heap
contato @EDF67894
valor 10
Stack/Pilha do método
Stack/Pilha do programa
private
valor
contato
}
15. Como funciona a passagem de parâmetros? - Exemplo 1
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
Heap
contato @ABC1234
valor 20
Stack/Pilha do método
Stack/Pilha do programa
private static void testePassagemValorReferencia(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato = new Contato("Contato 2", "2345-6789", "contato2@email.com");
}
nome: Contato 2
telefone: 1245-6789
email: contato2@email.com
16. Como funciona a passagem de parâmetros? - Exemplo 2
contato @EDF67894
valor 10
nome: Contato 1
telefone: 1234-4567
email: contato1@email.com
Heap
contato @EDF67894
valor 10
Stack/Pilha do método
Stack/Pilha do programa
private
valor
contato
}
17. Como funciona a passagem de parâmetros? - Exemplo 2
contato @EDF67894
valor 10
nome: Contato 20
telefone: 1234-4567
email: contato1@email.com
Heap
contato @EDF67894
valor 20
Stack/Pilha do método
Stack/Pilha do programa
private static void testePassagemValorReferencia2(int valor, Contato contato){
int novoValor = valor + 10;
valor = novoValor;
contato.setNome("Contato"+novoValor);
}
18. Como funciona a passagem de parâmetros? Exemplo 2
contato @EDF67894
valor 10
Heap
private
valor
contato
}
contato @EDF67894
valor
Stack/Pilha do método
Stack/Pilha do programa
Uma cópia dos valores é
feita e variáveis valor e contato
são criadas com escopo do
método
nome: Contato 20
telefone: 1234-4567
email: contato1@email.com
20
19. Como funciona a passagem de parâmetros? Exemplo 2
contato @EDF67894
valor 10
Heap
private
valor
contato
}
contato @EDF67894
valor
Stack/Pilha do método
Stack/Pilha do programa
Uma cópia dos valores é
feita e variáveis valor e contato
são criadas com escopo do
método continua
apontando pra
mesma referência
na memória
nome: Contato 20
telefone: 1234-4567
email: contato1@email.com
20
21. Tipos primitivos: passagem por valor
contato @EDF67894
valor 10
nome: Contato 20
telefone: 1234-4567
email: contato1@email.com
HeapStack/Pilha do programa
22. Tipos primitivos: passagem por valor
Tipos classe, enum, array: passagem por referência
contato @EDF67894
valor 10
nome: Contato 20
telefone: 1234-4567
email: contato1@email.com
HeapStack/Pilha do programa