gpt4 book ai didi

Java - 为什么原始包装类(例如整数)的值不在递归调用中维护?

转载 作者:行者123 更新时间:2023-12-04 15:44:06 25 4
gpt4 key购买 nike

我正在使用递归,我希望 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 对象也必须维护它的值(value)。

最佳答案

Java 包装器类型是不可变的。他们的值(value)观永远不会改变。

counter++ 真的是 counter = counter + 1;即创建了一个新对象。

关于Java - 为什么原始包装类(例如整数)的值不在递归调用中维护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com