Menu

Parâmetros de métodos em Java: argumentos, passagem por valor e retorno

Como funcionam os parâmetros de métodos em Java: passar argumentos, a diferença entre parâmetros e argumentos, a regra de passagem por valor do Java e o retorno de valores.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Parâmetros permitem que um método receba entradas

Um método que sempre faz a mesma coisa é limitado. Parâmetros são as entradas que você declara dentro dos parênteses do método para que o mesmo método possa trabalhar com valores diferentes a cada chamada.

Você lista cada parâmetro com um tipo e um nome. Dentro do corpo do método, um parâmetro se comporta como uma variável local comum que já contém o que quem chamou passou.

name é o parâmetro. "Sam" e "Alex" são os argumentos - os valores concretos fornecidos na chamada. Uma definição de método, duas saídas diferentes.

Parâmetros versus argumentos

Essas duas palavras são usadas de forma solta, mas vale a pena manter a distinção clara:

  • Um parâmetro é o espaço reservado na declaração: String name.
  • Um argumento é o valor que você realmente passa: "Sam".

Então void greet(String name) declara um parâmetro, e greet("Sam") passa um argumento. Quando alguém diz "este método recebe dois parâmetros", se refere à declaração; "passei dois argumentos" se refere à chamada.

Múltiplos parâmetros

Separe os parâmetros com vírgulas e dê a cada um o seu próprio tipo - você não pode compartilhar um tipo entre dois parâmetros como faria em uma declaração de variável:

Os argumentos são associados aos parâmetros estritamente por posição, não por nome. describe("Sam", 30, true) funciona porque a ordem coincide com (String name, int age, boolean active). Troque dois argumentos de tipos compatíveis e você terá um bug de lógica silencioso, não um erro de compilação - por isso a ordem importa.

Um erro comum é escrever int add(int a, b). Cada parâmetro precisa do seu próprio tipo: int add(int a, int b).

Retornando um valor

Parâmetros são como os dados fluem para dentro; o valor de retorno é como um resultado flui de volta para fora. Declare o tipo de retorno antes do nome do método e use return para devolver um valor a quem chamou:

O tipo de retorno (double) deve coincidir com o que você realmente faz return. Um método declarado void não retorna nada - ele ainda pode usar um return; simples para sair mais cedo, mas não pode retornar um valor. No instante em que return é executado, o método termina e o controle volta para o ponto da chamada.

Java é passagem por valor

Isso confunde quase todo mundo no início. Quando você passa um argumento, Java copia o valor para o parâmetro. Para tipos primitivos, isso significa que o método recebe sua própria cópia - alterar o parâmetro nunca toca a variável de quem chamou:

x continua 5. O método modificou sua própria cópia do número, não o original.

Passando objetos: ainda por valor, mas atenção à referência

Objetos parecem uma exceção, mas não são. O que é copiado é a referência (a seta que aponta para o objeto), não o objeto em si. Então o método aponta para o mesmo objeto e pode mutá-lo:

Dois resultados diferentes, uma só regra. addItem segue a referência e altera a lista real, então quem chamou vê new aparecer. replace reatribui o parâmetro a uma lista totalmente nova - mas isso só reaponta a cópia local da referência, então a list de quem chamou permanece intacta. A conclusão: você pode alterar um objeto através de um parâmetro, mas nunca pode fazer a variável de quem chamou apontar para outro lugar.

Próximo: sobrecarga de métodos

Agora você sabe como fornecer a um método exatamente as entradas de que ele precisa. Mas e se você quiser que um mesmo nome de método aceite conjuntos diferentes de parâmetros - digamos print(int) e print(String)? Isso é sobrecarga de métodos, e é a próxima página.

Perguntas frequentes

Qual é a diferença entre um parâmetro e um argumento em Java?

Um parâmetro é a variável nomeada na declaração do método - String name em void greet(String name). Um argumento é o valor concreto que você passa ao chamar o método - greet("Sam") passa o argumento "Sam". Em resumo: parâmetros vivem na definição, argumentos vivem na chamada.

Java é passagem por valor ou por referência?

Java é sempre passagem por valor. Para tipos primitivos, é passada uma cópia do valor, então reatribuir o parâmetro não altera a variável de quem chamou. Para objetos, é passada uma cópia da referência - você pode mutar o objeto para o qual a referência aponta (por exemplo, adicionar a uma lista), mas reatribuir o próprio parâmetro não afeta a variável de quem chamou.

Como passar vários argumentos para um método em Java?

Liste os parâmetros na declaração separados por vírgulas, cada um com seu próprio tipo: int add(int a, int b). Chame-o com os argumentos na mesma ordem: add(2, 3). Java associa os argumentos aos parâmetros estritamente por posição, não por nome, então a ordem precisa coincidir.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR