Considere el siguiente programa Java que pasa un tipo primitivo a la función.
Java
public class Main { public static void main(String[] args) { int x = 5; change(x); System.out.println(x); } public static void change(int x) { x = 10; } }
Producción:
5
Pasamos un int a la función “cambio()” y como resultado el cambio en el valor de ese entero no se refleja en el método principal. Al igual que C/C++, Java crea una copia de la variable que se pasa en el método y luego realiza las manipulaciones. Por lo tanto, el cambio no se refleja en el método principal.
¿Qué hay de los objetos o las referencias?
En Java, todas las primitivas como int, char, etc. son similares a C/C++, pero todas las no primitivas (u objetos de cualquier clase) son siempre referencias. Entonces se vuelve complicado cuando pasamos referencias de objetos a métodos. Java crea una copia de las referencias y la pasa al método, pero aún apuntan a la misma referencia de memoria. Significa que si establece algún otro objeto para hacer referencia al método pasado dentro, el objeto del método de llamada y su referencia no se verán afectados. Los cambios no se reflejan si cambiamos el objeto en sí para hacer referencia a otra ubicación u objeto . Si asignamos una referencia a otra ubicación, los cambios no se reflejan en main().
Java
// A Java program to show that references are also passed // by value. class Test { int x; Test(int i) { x = i; } Test() { x = 0; } } class Main { public static void main(String[] args) { // t is a reference Test t = new Test(5); // Reference is passed and a copy of reference // is created in change() change(t); // Old value of t.x is printed System.out.println(t.x); } public static void change(Test t) { // We changed reference to refer some other location // now any changes made to reference are not reflected // back in main t = new Test(); t.x = 10; } }
Producción:
5
Los cambios se reflejan si no asignamos una referencia a una nueva ubicación u objeto: si no cambiamos la referencia para hacer referencia a otro objeto (o ubicación de memoria), podemos realizar cambios en los miembros y estos cambios se reflejan nuevamente.
Java
// A Java program to show that we can change members using // reference if we do not change the reference itself. class Test { int x; Test(int i) { x = i; } Test() { x = 0; } } class Main { public static void main(String[] args) { // t is a reference Test t = new Test(5); // Reference is passed and a copy of reference // is created in change() change(t); // New value of x is printed System.out.println(t.x); } // This change() doesn't change the reference, it only // changes member of object referred by reference public static void change(Test t) { t.x = 10; } }
Producción:
10
Ejercicio: predecir la salida del siguiente programa Java
Java
// Test.java class Main { // swap() doesn't swap i and j public static void swap(Integer i, Integer j) { Integer temp = new Integer(i); i = j; j = temp; } public static void main(String[] args) { Integer i = new Integer(10); Integer j = new Integer(20); swap(i, j); System.out.println("i = " + i + ", j = " + j); } }
Este artículo es una contribución de Pranjal Mathur . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo electrónico a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA