package myintergertest;
/**
*
* @author Engineering
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//this one does not increment
Integer n = new Integer(0);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
//this one will increment
MyIntegerObj myInt = new MyIntegerObj(1);
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
}
public static void Increment(Integer n) {
//NO. this doesn't work because a new reference is being assigned
//and references are passed by value in java
n++;
}
public static void Increment(MyIntegerObj n) {
//this works because we're still operating on the same object
//no new reference was assigned to n here.
n.plusplus(); //I didn't know how to implement a ++ operator...
}
}
El resultado para todos es n = 0. El entero n es un objeto y, por lo tanto, se pasa por referencia, entonces, ¿por qué no se refleja el incremento en el método del llamante (principal)? Esperaba que la salida fuera n = 0 n = 1 n = 2 etc ...Cómo incrementar una clase El entero hace referencia al valor en Java desde otro método
ACTUALIZACIÓN: Aviso Actualicé el ejemplo de código anterior. Si estoy entendiendo correctamente, Jon Skeet respondió la pregunta de por qué miInt aumentaría y por qué n no. Es porque n obtiene una nueva referencia asignada en el método Increment. Pero myInt NO recibe una nueva referencia asignada, ya que llama a una función miembro.
¿Eso suena como que entiendo correctamente lol?
¿Querías decir '** Objects ** ** pasado por valor - ...'? – FrustratedWithFormsDesigner
No, no lo hizo.Los primitivos y las referencias se pasan por valor. Los objetos no se pasan en absoluto; ellos viven en el montón. – danben
Creo que entiendo, vea mis actualizaciones y hágamelo saber. ¡¡¡Gracias!!! – cchampion