/* Lab18.java (c) 2009 adolfo@di-mare.com */ /** @(#)Lab18.java 2009 Muestra que Java pasa copias de referencias a los objetos. Eso implica que se puede cambiar el objeto referenciado, pero no la referencia. Si se cambia la copia de la referencia, no se cambia la referencia original. Si se puede cambiar el valor referenciado, pero no se puede cambiar la referencia original. @author Adolfo Di Mare */ import java.io.*; // Clases para leer desde el teclado import java.util.*; // Random import junit.framework.*; // TestCase /** Muestra que Java pasa copias de referencias a los objetos. */ public class Lab18 extends TestCase { /** Muestra que los parámetros escalares no se pasan por referencia. * */ public static void noIntercambia( int P, int Q ) { int temp = P; P = Q; Q = temp; } /** test -> {@code noIntercambia()}. */ public void test_noIntercambia() { int P=12, Q=13; noIntercambia( P , Q ); assertTrue( P == 12 && Q == 13 ); assertTrue( P != 13 && Q != 12 ); } /** Intercambia V[i] <==> V[j]. */ static void intercambie( int V[], int i, int j ) { int tmp = V[i]; V[i] = V[j]; V[j] = tmp; } /** test -> {@code intercambie()}. */ public void test_intercambie() { int V[] = { 0,1,2,3,4,5 }; assertTrue( V.length == 6 ); // dimensión 6 assertTrue( V[3] == 3 && V[5] == 5 ); intercambie( V , 3,5 ); assertTrue( V[3] == 5 && V[5] == 3 ); // V[] sí fue modificado } /** Graba en {@code VEC_doble[]} 2 veces cada valor de {@code V[]}. *