Foro de elhacker.net

Programación => Java => Mensaje iniciado por: kasiko en 16 Diciembre 2010, 22:11 pm



Título: paso por referencia de un integer
Publicado por: kasiko en 16 Diciembre 2010, 22:11 pm
 a ver, los datos primitivos, siempre pasan por valor, y los objetos por referencia,
entonces esto:
Código:

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?


Título: Re: paso por referencia de un integer
Publicado por: Oblivi0n en 16 Diciembre 2010, 22:46 pm
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!


Título: Re: paso por referencia de un integer
Publicado por: kasiko en 16 Diciembre 2010, 22:54 pm
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.


Título: Re: paso por referencia de un integer
Publicado por: Oblivi0n en 16 Diciembre 2010, 23:42 pm
Cito de la pagina web ->  http://www.joseduenas.com/archivos/327 (http://www.joseduenas.com/archivos/327)
Citar
En 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


Título: Re: paso por referencia de un integer
Publicado por: 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


Título: Re: paso por referencia de un integer
Publicado por: kasiko en 17 Diciembre 2010, 14:46 pm
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  :-(


Título: Re: paso por referencia de un integer
Publicado por: Oblivi0n en 17 Diciembre 2010, 15:51 pm
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


Título: Re: paso por referencia de un integer
Publicado por: egyware en 18 Diciembre 2010, 18:54 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!!


Título: Re: paso por referencia de un integer
Publicado por: kasiko en 21 Enero 2011, 21:07 pm
total, que la explicacion queda ausente.... pues espero que no me hagan esta pregunta en la certificacion  :rolleyes:


Título: Re: paso por referencia de un integer
Publicado por: ChavalChavito en 24 Enero 2011, 06:26 am
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?
Código:
/**
 *
 * @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;
    }
}