paso por referencia de un integer

Iniciado por kasiko, 16 Diciembre 2010, 22:11 PM

0 Miembros y 1 Visitante están viendo este tema.

kasiko

 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?
Nos vemos...


Oblivi0n

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!

kasiko

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.
Nos vemos...


Oblivi0n

Cito de la pagina web ->  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 algo como lo que tu dices, la verdad, es un lio jajaja

sapito169

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

kasiko

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  :-(
Nos vemos...


Oblivi0n

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

egyware

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!!

kasiko

total, que la explicacion queda ausente.... pues espero que no me hagan esta pregunta en la certificacion  :rolleyes:
Nos vemos...


ChavalChavito

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;
    }
}