copias de valores primitivos (como valores de tipo 

int

 y 

double

) y copias de referencias a objetos (incluyendo las 

referencias a arreglos). Los objetos en sí no pueden pasarse a los métodos. Cuando un método modifi ca un pará-
metro de tipo primitivo, las modifi caciones a ese parámetro no tienen efecto en el valor original del argumento en 
el método que hizo la llamada. Por ejemplo, cuando la línea 30 en 

main

 de la fi gura 7.13 pasa 

arreglo[ 3 ]

 al 

método 

modificarElemento

, la instrucción en la línea 45 que duplica el valor del parámetro 

elemento

no tiene 

efecto sobre el valor de 

arreglo[ 3 ] 

en 

main

. Esto también se aplica para los parámetros de tipo por referen-

cia. Si usted modifi ca un parámetro de tipo por referencia al asignarle la referencia de otro objeto, el parámetro 
hace referencia al nuevo objeto, pero la referencia almacenada en la variable del método que hizo la llamada sigue 
haciendo referencia al objeto original.

Aunque la referencia a un objeto se pasa por valor, un método puede de todas formas interactuar con el obje-

to al que se hace referencia, llamando a sus métodos 

public

 mediante el uso de la copia de la referencia al objeto. 

Como la referencia almacenada en el parámetro es una copia de la referencia que se pasó como argumento, el 
parámetro en el método que se llamó y el argumento en el método que hizo la llamada hacen referencia al mismo 
objeto en la memoria. Por ejemplo, en la fi gura 7.13, tanto el parámetro 

arreglo2

 en el método 

modificarArre

glo

 como la variable 

arreglo

 en 

main

 hacen referencia al mismo objeto en la memoria. Cualquier modifi cación 

que se realice usando el parámetro 

arreglo2

 se lleva a cabo en el mismo objeto al que hace referencia la varia-

ble que se pasó como argumento en el método que hizo la llamada. En la fi gura 7.13, las modifi caciones realizadas 
en 

modificarArreglo

 en las que se utiliza 

arreglo2

, afectan al contenido del objeto arreglo al que hace referencia 

arreglo

 en 

main

. De esta forma, con una referencia a un objeto, el método que se llamó puede manipular el 

objeto del método que hizo la llamada directamente.

Tip de rendimiento 7.1

Pasar arreglos por referencia tiene sentido por cuestiones de rendimiento. Si los arreglos se pasaran por valor, se 
pasaría una copia de cada elemento. En los arreglos grandes que se pasan con frecuencia, esto desperdiciaría tiempo 
y consumiría una cantidad considerable de almacenamiento para las copias de los arreglos.

7.8 Ejemplo práctico: la clase 

LibroCalificaciones

 que usa un 

arreglo para almacenar las califi caciones

En esta sección desarrollaremos aún más la clase 

LibroCalificaciones

, que presentamos en el capítulo 3 y 

expandimos en los capítulos 4 y 5. Recuerde que esta clase representa un libro de califi caciones utilizado por 
un instructor para almacenar y analizar un conjunto de califi caciones de estudiantes. Las versiones anteriores de 
esta clase procesan un conjunto de califi caciones introducidas por el usuario, pero no mantienen los valores de las 
califi caciones individuales en variables de instancia de la clase. Por ende, los cálculos repetidos requieren que el 
usuario vuelva a introducir las mismas califi caciones. Una manera de resolver este problema sería almacenar cada 
califi cación introducida por el usuario en una instancia individual de la clase. Por ejemplo, podríamos crear las 
variables de instancia 

calificacion1

calificacion2

, …, 

calificacion10

 en la clase 

LibroCalificaciones

 para 

almacenar 10 califi caciones de estudiantes. No obstante, el código para totalizar las califi caciones y determinar 
el promedio de la clase sería voluminoso, y la clase no podría procesar más de 10 califi caciones a la vez. En esta 
sección resolvemos este problema, almacenando las califi caciones en un arreglo.

Almacenar las califi caciones de los estudiantes en un arreglo en la clase 

LibroCalificaciones

La versión de la clase 

LibroCalificaciones

 (fi gura 7.14) que presentamos aquí utiliza un arreglo de enteros para 

almacenar las califi caciones de varios estudiantes en un solo examen. Esto elimina la necesidad de introducir varias 
veces el mismo conjunto de califi caciones. El arreglo 

calificaciones

 se declara como una variable de instancia 

en la línea 7; por lo tanto, cada objeto 

LibroCalificaciones

 mantiene su propio conjunto de califi caciones. El 

constructor de la clase (líneas 10 a 14) tiene dos parámetros: el nombre del curso y un arreglo de califi caciones. 
Cuando una aplicación (por ejemplo, la clase 

PruebaLibroCalificaciones

 en la fi gura 7.15) crea un objeto 

LibroCalificaciones

, la aplicación pasa un arreglo 

int

 existente al constructor, el cual asigna la referencia del 

arreglo a la variable de instancia 

calificaciones

 (línea 13). El tamaño del arreglo 

calificaciones

 se determina 

en base a la clase que pasa el arreglo al constructor. Por ende, un objeto 

LibroCalificaciones

 puede procesar un 

número de califi caciones variable. Los valores de las califi caciones en el arreglo que se pasa podría introducirlos 
un usuario desde el teclado, o podrían leerse desde un archivo en el disco (como veremos en el capítulo 14). En 

7.8 Ejemplo práctico: la clase 

LibroCalificaciones

 que usa un arreglo para almacenar las califi caciones 

279

07_MAQ_CAP_07.indd279

4/19/081:23:00AM