Parâmetros dentro de funções - dúvida [RESOLVIDO]

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 :slight_smile:

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.

1 curtida

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…

image

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…

image

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.