a ver, los datos primitivos, siempre pasan por valor, y los objetos por referencia,
entonces esto:
public class NewClass3 {
public static void main(String [] args){
Integer n=new Integer(5);
obj k=new obj();
k.imp(n);
System.out.println(n);
}
}
class obj{
public void imp(Integer n){
++n;
}
}
¿no deberia imprimir 6?
Cuando pasas algo por valor, creas una copia de ese dato, y se la pasas a una función
Cuando pasas algo por referencia, lo que estas pasando es la direccion de memoria de ese dato, y no, no se restringe el uso de parametros por referencia solo a objetos (al menos en C++ puedes pasar todo tipo de variables por referencia)
Por defecto, el paso de variables es por valor,y en tu caso, tambien, lo que tu haces es pasar a la funcion imp(Integer n), una variable por valor, con lo cual, le estas pasando una copia, al hacer ++n, ese aumento solo es valido dentro de esa funcion.
Para que haga lo que tu quieres, tienes que pasar por referencia la variable n, o, hacer el metodo de tipo int(o el que sea) que devuelva el valor 6(en este caso) a la variable n, para luego imprimirlo
Saludos!
Seguramente este equivocado, pero creo una variable llamada n como un objeto de tipo integer, luego se supone que le paso un objeto... y tengo entendio que en java, los strings y los objetos siempre se pasan por referencia.
Cito de la pagina web -> http://www.joseduenas.com/archivos/327 (http://www.joseduenas.com/archivos/327)
CitarEn el paso de parámetros de variables a métodos en Java se suele decir que:
las variables de tipo simple (int, double, etc) se pasan por valor
los objetos se pasan por referencia.
Ésto no es cierto, después de consultar varias fuentes puedo concluir que en Java las variables, ya sean simples u objetos, se pasan siempre por valor.
No se como se hará en java, pero en C / C++, se utilizan punteros, (Java no los tiene, si no me equivoco)
P.D: He leido en Error500 http://www.error500.net/garbagecollector/archives/categorias/java/paso_de_parametros_a_funciones_java.php (http://www.error500.net/garbagecollector/archives/categorias/java/paso_de_parametros_a_funciones_java.php) algo como lo que tu dices, la verdad, es un lio jajaja
no existe el paso por referensia ni punteros en java ni los necesitamos es mas el mundo es mejor cuando borro los unicos punteros en que existieron java segun las sabias palabras de golsin amen
Cita de: sapito169 en 17 Diciembre 2010, 06:13 AM
no existe el paso por referensia ni punteros en java ni los necesitamos es mas el mundo es mejor cuando borro los unicos punteros en que existieron java segun las sabias palabras de golsin amen
lo siento, pero no me aclaras nada :-(
Cita de: sapito169 en 17 Diciembre 2010, 06:13 AM
no existe el paso por referensia ni punteros en java ni los necesitamos es mas el mundo es mejor cuando borro los unicos punteros en que existieron java segun las sabias palabras de golsin amen
para decir cosas asi, mejor no las digas... si amas Java y todo lo relaccionado con ello, vale, pero contesta para ayudar, no para despotricar
Cita de: guru6 en 16 Diciembre 2010, 23:42 PM
No se como se hará en java, pero en C / C++, se utilizan punteros, (Java no los tiene, si no me equivoco)
LOL LOL LOL
Java si tiene punteros xD TODO es puntero, pero NO HAY aritmetica de punteros.
Lo que pasa que hay cierto objetos inmutables como los String, que nunca se modifican a si mismo si no que entregan una copia modificada. Es posible que ocurra lo mismo con Integer
Prueba pasando un Arreglo y podras pasar datos por referencia, es una buena emulación de los punteros de C/C++
Saludos!!
total, que la explicacion queda ausente.... pues espero que no me hagan esta pregunta en la certificacion :rolleyes:
Java pasa los parámetros por valor(cuando un argumento se pasa a una función, la función recibe una copia del valor original. Por lo tanto, si la función modifica el parámetro, sólo la copia cambia y el valor original permanece intacto)..
Para ver el 6?
/**
*
* @author Chavito
*/
public class Main {
public static void main(String[] args) {
Entero n=new Entero(5);
imp(n);
System.out.println(n);
}
public static void imp(Entero n){
n.valor++;
}
}
class Entero{
public int valor;
public Entero(int valor){
this.valor=valor;
}
}