Saltar a contenido

Scope

En todos los lenguajes este es un tema muy importante. Los argumentos son los datos que recibe un método y que necesita para funcionar. Existen dos tipos de argumentos o parámetros: por valor y por referencia. En el primero, los valores que recibe el método son copias de los valores originales pasados al mismo, por tanto, cualquier modificación que se realice sobre ellos solo será visible en el ámbito del método (dentro del método). En el segundo, se recibe la referencia de la posición en memoria donde se encuentra el dato, esto hace que dentro del método se trabaje con el dato verdadero, no con una copia y las modificaciones no se refieran únicamente al ámbito del método, sino que afecten directamente al dato.

En Java, todos los tipos básicos pasan por valor y todos los objetos pasan por referencia. Si pasamos un dato primitivo como parámetro, lo estamos pasando por valor y si este parámetro es modificado dentro del método, esa modificación solo se ha producido en la copia creada en el método. La copia desaparece al salir del método.

A tener en cuenta

Los tipos básicos (int, double, char, boolean, float, short y byte) se pasan por valor. La inmensa mayoría de objetos se pasan por referencia, aunque los objetos pertenecientes a clases de tipo inmutable se pasan por valor. Las clases String, Integer, Double son ejemplos de clases inmutables. Los arrays se pasan por referencia.

Los métodos pueden devolver valores de tipos primitivos (int, short, double, etc.), String, arrays e incluso objetos. En todos los casos es el comando return el que realiza esta labor. En el caso de arrays y objetos, devuelve una referencia a ese array u objeto.