Integer
再帰を使用しており、再帰呼び出し間でオブジェクトの値を保持したいと考えています。例えば
public void recursiveMethod(Integer counter) {
if (counter == 10)
return;
else {
counter++;
recursiveMethod(counter);
}
}
public static void main(String[] args) {
Integer c = new Integer(5);
new TestSort().recursiveMethod(c);
System.out.println(c); // print 5
}
ただし、以下のコード (ラッパー クラスのCounter
代わりにクラスを使用している場合、値は維持されます)Integer
public static void main(String[] args) {
Counter c = new Counter(5);
new TestSort().recursiveMethod(c);
System.out.println(c.getCount()); // print 10
}
public void recursiveMethod(Counter counter) {
if (counter.getCount() == 10)
return;
else {
counter.increaseByOne();
recursiveMethod(counter);
}
}
class Counter {
int count = 0;
public Counter(int count) {
this.count = count;
}
public int getCount() {
return this.count;
}
public void increaseByOne() {
count++;
}
}
プリミティブ ラッパー クラスの動作が異なる理由。結局のところ、どちらもオブジェクトであり、再帰呼び出しでは、Integer
オブジェクトを渡しているだけでなくint
、そのInteger
オブジェクトもその値を維持する必要があります。