Existem diferentes maneiras pelas quais os dados dos parâmetros podem ser passados ​​para dentro e para fora dos métodos e funções . Vamos supor que uma função B() seja chamada de outra função A() . Neste caso, A é chamada de “função do chamador” e B é chamada de “função chamada ou função do receptor” . Além disso, os argumentos que A envia para B são chamados de argumentos reais e os parâmetros de B são chamados de argumentos formais .
 

Tipos de parâmetros:

  • Parâmetro formal: uma variável e seu tipo conforme aparecem no protótipo da função ou método. 
    Sintaxe: 
     
function_name(datatype variable_name)
  • Parâmetro real: a variável ou expressão correspondente a um parâmetro formal que aparece na chamada de função ou método no ambiente de chamada. 
    Sintaxe: 
     
func_name(variable name(s)); 

Métodos importantes de passagem de parâmetro

1. Passar por valor: as alterações feitas no parâmetro formal não são transmitidas de volta ao chamador. Quaisquer modificações na variável de parâmetro formal dentro da função ou método chamado afetam apenas o local de armazenamento separado e não serão refletidas no parâmetro real no ambiente de chamada. Este método também é chamado de chamada por valor . Java, na verdade, é estritamente chamado por valor.

 

Exemplo: 
 

// Java program to illustrate
// Call by Value
 
// Callee
class CallByValue {
 
    // Function to change the value
    // of the parameters
    public static void Example(int x, int y)
    {
        x++;
        y++;
    }
}
 
// Caller
public class Main {
    public static void main(String[] args)
    {
 
        int a = 10;
        int b = 20;
 
        // Instance of class is created
        CallByValue object = new CallByValue();
 
        System.out.println("Value of a: " + a
                           + " & b: " + b);
 
        // Passing variables in the class function
        object.Example(a, b);
 
        // Displaying values after
        // calling the function
        System.out.println("Value of a: "
                           + a + " & b: " + b);
    }
}
Saída: 
Valor de a: 10 e b: 20
Valor de a: 10 e b: 20

 

Deficiências: 

  • Ineficiência na alocação de armazenamento
  • Para objetos e matrizes, a semântica de cópia é cara

2. Chamada por referência (aliasing): As alterações feitas no parâmetro formal são transmitidas de volta ao chamador por meio da passagem de parâmetro. Quaisquer alterações no parâmetro formal são refletidas no parâmetro real no ambiente de chamada, pois o parâmetro formal recebe uma referência (ou ponteiro) para os dados reais. Este método também é chamado de chamada por referência . Este método é eficiente no tempo e no espaço.
 

// Java program to illustrate
// Call by Reference
 
// Callee
class CallByReference {
 
    int a, b;
 
    // Function to assign the value
    // to the class variables
    CallByReference(int x, int y)
    {
        a = x;
        b = y;
    }
 
    // Changing the values of class variables
    void ChangeValue(CallByReference obj)
    {
        obj.a += 10;
        obj.b += 20;
    }
}
 
// Caller
public class Main {
 
    public static void main(String[] args)
    {
 
        // Instance of class is created
        // and value is assigned using constructor
        CallByReference object
            = new CallByReference(10, 20);
 
        System.out.println("Value of a: "
                           + object.a
                           + " & b: "
                           + object.b);
 
        // Changing values in class function
        object.ChangeValue(object);
 
        // Displaying values
        // after calling the function
        System.out.println("Value of a: "
                           + object.a
                           + " & b: "
                           + object.b);
    }
}
Saída: 
Valor de a: 10 e b: 20
Valor de a: 20 e b: 40

 

Observe que quando passamos uma referência, uma nova variável de referência para o mesmo objeto é criada. Portanto, só podemos alterar os membros do objeto cuja referência é passada. Não podemos alterar a referência para se referir a algum outro objeto, pois a referência recebida é uma cópia da referência original. Por favor, veja o exemplo 2 em Java é Strictly Pass by Value!