Por lo tanto, para responder a sus preguntas, primero debe saber cómo pasa Java las variables.
una variable tiene un valor:
int i = 1234;
Person p = new Person("Peter");
Ahora, la variable i contiene exactamente 1.234, mientras que la variable p contiene la Dirección de memoria de la persona creada.
entonces yo contiene 1234 yp contiene la dirección (digamos a4dfi3).
anyMethodYouLike(p);
System.out.println(p.getName());
public void anyMethodYouLike(Person somePerson) {
somePerson.rename("Homer");
}
por lo tanto, en este ejemplo, le damos al método anyMethodYouLike the Variable p ... ¡espere! le damos al Método el valor de la Variable (a4dfi3). El método llama a renombrar en esta variable (que todavía tiene la misma dirección que p tiene, por lo tanto, modifica la misma persona a la que apunta p). Entonces, después del Método, se imprime el Nombre de la Persona p, lo que da como resultado "Homer".
someOtherMethod(p);
System.out.println(p.getName());
public void someOtherMethod(Person somePerson) {
somePerson = new Person("Walter");
}
En ESTE ejemplo todavía damos la dirección de nuestra Persona llamada "Peter" al Método. Pero esta vez, el método crea una nueva persona en somePerson (por lo tanto, anula la dirección en somePerson a ... digamos 13n37s. PERO!¡La Persona en a4dfi3 no fue cambiada! La llamada de impresión sigue produciendo "Peter" y no "Walter".
Ahora, vamos a ver cómo se comporta con las primitivas:
someMethod(i);
System.out.println(i);
public void someMethod(int someInt) {
someInt++;
}
Por lo tanto, el valor de I (1234) se pasa a someInteger. Entonces, un poco más se incrementa a 1235. Pero todavía estoy 1234.
Esta es la gran diferencia entre los objetos y las primitivas en Java.
Ahora a sus preguntas: 1. Como puede leer aquí, sí Java siempre pasa la Dirección de referencia del Objeto. 2. Si no quiere que alguien altere los valores de sus Objetos, primero tiene que crear un Objeto nuevo con esa información (por ejemplo, con Cloneable y clonar()), pero es un verdadero desastre porque tiene que hacer seguro, que todo en tu Objeto que no es primitivo se vuelve a crear, lo cual es horrible cuando tienes enormes estructuras de árbol de objetos.
espero poder ayudar, Ferdi265
... o el objeto está diseñado para ser inmutable. –
@Michael Borgwardt: buen punto. Creo que agregarlo a la respuesta confundirá a la persona que hace la pregunta ... –
es una matriz pasada por referencia? Hasta donde yo sé, es un tipo primitivo, pero es mutable. – bigblind