Hay dos tipos de parámetros, uno son los parámetros formales y el segundo son los parámetros reales . Los parámetros formales son aquellos parámetros que se definen durante la definición de la función y los parámetros reales son aquellos que se pasan durante la llamada de función en otra función.
Mostrando los parámetros formales y reales a través del código:
Java
// Java program to show the difference // between formal and actual parameters import java.io.*; class GFG { static int sum(int a,int b) // Formal parameters { return a+b; } public static void main (String[] args) { int a=5; int b=10; System.out.println(sum(a,b)); //This is actual parameters } }
15
- Las funciones se pueden diferenciar sobre la base de parámetros.
- Y hay dos formas de pasar los parámetros en las funciones: llamar por valor y c todo por referencia .
- C/C++ admite la llamada por referencia porque en la llamada por referencia pasamos la dirección de los parámetros reales en lugar de los parámetros formales mediante Punteros.
- Y Java no admite punteros, es por eso que Java no admite llamadas por referencia, pero c/c++ admite punteros, por lo tanto, estos lenguajes admiten llamadas por referencia.
Swapping of Two numbers in C/C++ language is done by the call by Reference approach
A continuación se muestra la implementación de Call by Reference en C
C
// C program o show the call by reference support #include <stdio.h> // formal parameters void swap(int* x, int* y) { int temp; // save the value at address x temp = *x; // put y into x *x = *y; // put temp into y *y = temp; return; } int main() { int a = 15; int b = 5; printf("Value of a %d\n", a); printf("Value of b %d\n", b); // swapping the value using call by reference swap(&a,&b); printf("Value of a %d\n", a); printf("Value of b %d", b); return 0; }
Value of a 15 Value of b 5 Value of a 5 Value of b 15
En Java, si intentamos intercambiar números en Java, los cambios en el estado de los dos números son válidos solo en el método de intercambio particular.
Intercambiar dos números en java:
Java
// Java program to swap two numbers import java.io.*; class GFG { static void swap(int a, int b) { int temp = a; a = b; b = temp; System.out.println("Value of a in swap function " + a); System.out.println("Value of b in swap function " + b); return; } public static void main(String[] args) { int a = 5; int b = 10; // original value of a System.out.println("Value of the a " + a); // original value of b System.out.println("Value of the b " + b); // swap the numbers swap(a, b); System.out.println("Value of the a " + a); System.out.println("Value of the b " + b); } }
Value of the a 5 Value of the b 10 Value of a in swap function 10 Value of b in swap function 5 Value of the a 5 Value of the b 10
Hay algunas formas de lograr pasar por referencia en Java en lugar de la llamada por referencia:
1. Hacer una variable particular de un tipo de datos particular como miembro de clase
- Se puede acceder a un miembro de la clase a través de la definición de la clase y podemos acceder a los miembros usando esta palabra clave cuando hay una variable local que tiene el mismo nombre que el nombre del miembro de la clase presente en el cuerpo de la función en particular o en la definición de la función para evitar confusiones.
- Para pasar la referencia, pasamos el objeto de la clase en lugar del parámetro real y el parámetro formal de un tipo de objeto de clase tiene la misma referencia entre sí, por eso con la ayuda del objeto de parámetro formal de clase cualquier los cambios se verán reflejados tanto en los objetos formales como en los objetos reales.
Java
// Java program to make a particular variable // of a particular datatype as a class member import java.io.*; class GFG { int Number; void GFG() { Number = 0; } static void update(GFG ob) { ob.Number++; } public static void main(String[] args) { GFG ob = new GFG(); System.out.println("Number value " + (ob.Number)); update(ob); System.out.println("Updated Number value " + (ob.Number)); } }
Number value 0 Updated Number value 1
2. Pasar colecciones o array de un solo elemento como parámetro:
- Podemos pasar colecciones como ArrayList, stack, etc. o una array de un solo elemento como parámetros reales, y tanto los parámetros reales como los formales de la función tienen la misma referencia a la dirección de memoria.
Java
// Java program to passing collections // as parameters import java.io.*; import java.util.*; class GFG { static void update(int a[]) { // formal parameter a[0]++; } static void update2(ArrayList<Integer> A) { for (int i = 0; i < A.size(); ++i) { // update the item of // the arraylist A.set(i, A.get(i) + 1); } } public static void main(String[] args) { // using single array of element int a[] = new int[1]; System.out.println("Number Value " + a[0]); // actual parameter update(a); System.out.println("Number Value " + a[0]); // using Arraylist collection ArrayList<Integer> A = new ArrayList<>(); A.add(1); A.add(2); System.out.println("List " + A); // actual parameter update2(A); System.out.println("Updated List " + A); } }
Number Value 0 Number Value 1 List [1, 2] Updated List [2, 3]
3. Actualice el valor de retorno:
- Enfoque ingenuo para realizar una referencia simplemente actualizando el valor de retorno con el valor anterior.
Java
// Java program to show the return // value getting updated import java.io.*; class GFG { static int update(int number) { // update the number return ++number; } public static void main(String[] args) { int number = 3; // printing the number System.out.println("Number " + number); int returnnumber = update(number); // update the number number = returnnumber; // printing the updated number; System.out.println("Updated number " + number); } }
Number 3 Updated number 4
Publicación traducida automáticamente
Artículo escrito por zack_aayush y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA