Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/11/2010, 06:33
Darkhogg
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Duda con Arrays de enteros

Primero necesito tu código un pelín bonito que si no no lo entiendo:
Código:
//ejercicios

class A {
    static int x[] = {1, 2};
    int y[];

    void f (int z[]) {
        z[1]+=2;
    }

    void g ( ) {
        A a = new A ( );
        a.x[0]++;
    }

    public static void main (String args[ ]) {
        A b = new A ( );
        b.y = b.x;
        b.f(b.y);
        b.g ( );
        System.out.println (b.x[0] + " " + b.x[1])
    }
}
estudiemos el progreso de la aplicación:
- Creamos un nuevo objeto A y guardamos una referencia a él en b
- Asignamos en b.y el valor de A.x (aunque en el código se accede usando b.x, no debería, puesto que x es ESTÁTICO). Esta asignación significa que los dos campos contienen una referencia AL MISMO ARRAY, y no a arrays iguales (cambios en el uno afectan al otro, etc)
- Llamamos al método b.f(int[]) con el array b.y, el cual incrementa en 2 unidades la posicion 1 de b.y y, por tanto, de la posición 1 de A.x
- Llamamos al método b.g() que crea un nuevo objeto A (todavía no sé para qué) y lo utiliza para incrementar la posición 0 del array A.x en una unidad (de nuevo usando una instancia para acceder a un campo ESTÁTICO)
- Imprimimos las posiciones 0 y 1 del vector A.x (de nuevo usando una instancia, que ya está empezando a dolerme), que en este punto contiene los valores 1 y 2 respectivamente

El único punto con posible dificultad es la asignación. En toda la ejecución sólo existe un array, al que nos podemos referir tanto con A.x como con b.y, debido a la asignación de la segunda línea del main.

Y cuidadito con usar instancias para acceder a campos o llamar a métodos que sean estáticos. Java nos deja hacerlo pero está muy desaconsejado puesto que puede llevar a confusiones como la del método g() de este código, que crea un objeto A completamente innecesario que lo único que hace es gastar tiempo y memoria. También desde Java se aconseja declarar los arrays con los corchetes en el tipo y no en el nombre de la variable:
Código:
int[] x; // Good
int x[]; // Not so good