Olá pessoal! Eu sou iniciante em java e estou estudando a partir de um livro inglês (Fundamentals of java programming - Mitsunori Ogihara) que encontrei na internet e quando chegou na parte dos parâmetros eu me perdi um pouco no seguinte exemplo, alguém poderia me explicar porque o output são das declarações do main e não da função? E porque isso ocorre?
(anexei a foto ao post, se não tiver dado certo me perdoem, pois é a primeira vez aqui
A que output você se refere e em qual linha? Fala do Scanner criado na linha 8, que é passado como parâmetro para o método test na linha 9?
É preferível que você copie e cole o código da sua IDE/editor e use a opção de formatação (botão </>
).
Abraço.
Faço coro ao @TerraSkilll. Mas achei interessante o código e resolvi ajudar, mesmo você tendo postado uma imagem e não o código:
import java.util.*;
public class Levon {
public static void main(String[] args){
String word = "Tyni Dancer";
double radius = 19.7;
Scanner textScanner = new Scanner("Madman across the water");
test(word, textScanner, radius); //#1
System.out.println(radius); // #5
System.out.println(word); // #6
System.out.println(textScanner.next()); //#7
}
public static void test(String w, Scanner t, double r){
w = "Levon"; // #2
r = 4.5; // #3
System.out.println(t.next()); // #4
}
}
Creio eu que o objetivo do autor é demonstrar que como a passagem é por valor, mesmo alterando o valor das variáveis w
e r
no método test
, os valores das variáveis locais word
e radius
do método main
não se alteram, o que seria diferente se houvesse passagem por referência, como no caso do parâmetro formal t
que faz uma referência ao objeto Scanner
declarado no main
. Então ele mostra os dados depois de chamar o método test
para demonstrar que a passagem por valor, como só passa uma cópia do valor, não altera os valores informados no método main
.
1 - invoca o método test
;
2 - atribui o valor "Levon"
ao parâmetro formal w
;
3 - atribui o valor 4.5
ao parâmetro formal r
;
4 - encontra e retorna o próximo token. No caso, o primeiro token é "Madman
". Imprime o token:
Madman
O parâmetro formal t
é uma referência a um objeto do tipo Scanner
. Logo é uma passagem por referência. Logo, fazendo:
t = new Scanner("X");
Em vez de imprimir "Madman"
, iria imprimir "X"
.
5 - imprime o valor da variável local radius
. Como a passagem é por valor, o valor de radius
não foi alterado pelo método test
:
19.7
6 - imprime o valor da variável local word
. Como a passagem é por valor, o valor de word
não foi alterado pelo método test
:
Tyni Dancer
7 - encontra e retorna o próximo token. No caso, o segundo token é "across"
. Imprime o token:
across
Rodando…
Se eu fizer:
public static void test(String w, Scanner t, double r){
w = "Levon"; // #2
r = 4.5; // #3
t = new Scanner("X");
System.out.println(t.next()); // #4
}
Rodando…
Algo semelhante é feito aqui: Curso de Java 61: Passagem de parâmetros por valor e por referência.
Obrigada!!! Era exatamente essa a minha dúvida, o funcionamento de passagens por valor e referência. Me desculpe por postar a foto, ficarei atenta á próxima vez e postarei o código.