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...
}
}
Результат для всех из них равен n = 0. Целое число n является объектом и поэтому передается по ссылке, поэтому почему инкремент не отражается обратно в методе вызывающего (main)? Я ожидал, что выход будет равен n = 0 n = 1 n = 2 и т.д.
UPDATE: Обратите внимание: я обновил приведенный выше пример кода. Если я правильно понимаю, Джон Скит ответил на вопрос, почему myInt будет увеличиваться, а почему нет. Это связано с тем, что n получает новую ссылку, назначенную в методе Increment. Но myInt НЕ получает новую ссылку, поскольку вызывает функцию-член.
Звучит ли так, что я правильно понимаю lol?