#116 sigo sin entender qué es lo que no ves. ¡VETE A DESCANSAR HOMBRE! xD
Para que lo veas bien, doStuff bien podría ser un método estático que haría lo mismo. No estás accediendo a miembros, ¿qué más dará a qué haga referencia?
List<String> y = StaticMyPancake.doStuff(x);
doStuff recibe un argumento y devuelve ese mismo argumento con "9" añadido. ¡No toca miembro alguno!
Aparte, no estás guardando un objeto MyPancake sino un List<String>, el que devuelve la llamada a (new MyPancake()).doStuff(x)
#116 En efecto, esa es la explicación a la que siempre hace alusión la gente. UNA MIERDA En Java el paso de hijos de Object es por referencia.
Por eso al pasar a una función como argumento un objeto, pasamos la referencia al mismo
Osea que dice que no está pasando por referencia, y tan pancho añade pasamos la referencia al mismo. ¡Qué calidad!
La única excepción es la clase String , cuyos objetos no son mutables. Cualquier modificación de un objeto String lleva aparejada la creación de una nueva instancia del objeto.
Esto ya es retarded total. Que el objeto sea inmutable hace que se convierta mágicamente en... ¿qué exactamente?
Ese texto lo he visto cientos de veces ya y nunca entiendo la argumentación que hace.
En realidad, el tío entendió mal que en Java el paso es por "valor de referencia", es decir, que es el valor de un puntero C de toda la vida, un int pusheado a la pila con un valor concreto... La historia es que en Java tú no puedes cambiar el valor del puntero (¡sólo el valor al que apuntan las variables locales que referencian los argumentos!) mientras que en C/C++ sí, de ahí que la gente se invente estas mamonadas de discusiones semánticas.
Te redirijo a http://stackoverflow.com/questions/40480/is-java-pass-by-reference donde en efecto, se enteran más (y explican mejor) que el menda este que siempre aparece en Google xD
I believe that much of the confusion on this issue has to do with the fact that different people have different definitions of the term "reference". People coming from a C++ background assume that "reference" must mean what it meant in C++, people from a C background assume "reference" must be the same as "pointer" in their language, and so on. Whether it's correct to say that Java passes by reference really depends on what's meant by "reference".
Más y mejor: http://stackoverflow.com/questions/8113781/what-exactly-does-pass-by-reference-mean
#116 De todas formas, vaya peligro. Lo suyo es que hubiera un indicador previo al objeto que se pasa. Pero claro, como no hay punteros...
¿Ein? ¿A qué te refieres con indicador previo?
Aún así, en Java si hay punteros. Otra cosa es que tú no lo veas, pero prueba a hacer:
String prueba = null;
prueba.charAt(0);
Obtendrás un bonito NullPointerException.