Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—为什么原始包装类(例如整数)的值为';在递归调用中不维护?_Java_Recursion - Fatal编程技术网

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

Java—为什么原始包装类(例如整数)的值为';在递归调用中不维护?,java,recursion,Java,Recursion,我正在使用递归,我希望一个整数对象在递归调用中保留其值。e、 g public void recursiveMethod(Integer counter) { if (counter == 10) return; else { counter++; recursiveMethod(counter); } } public static void main(String[] args) { Integer c = n

我正在使用递归,我希望一个
整数
对象在递归调用中保留其值。e、 g

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
}
但是在下面的代码中(我使用的是
计数器
类而不是
整数
包装类),该值是保持不变的

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++;
    }
}

那么为什么primitve包装类的行为不同呢?毕竟,两者都是对象,在reucrsive调用中,我传递的是
Integer
对象,而不仅仅是
int
,因此
Integer
对象也必须保持其值。


counter++
实际上是
counter=counter+1
;即创建了一个新对象。

一些对象,如字符串、整数等……即使是对象,也是不可变的

试试这个链接

我建议你做以下事情

         public void recursiveMethod(Integer counter) 
         {
            if (counter == 10)
            return counter;  // return the value
            else 
            {
                    counter++;
                    counter=recursiveMethod(counter);
             }
         }

         public static void main(String[] args) 
         {
           Integer c = new Integer(5);
           c=(Integer)new TestSort().recursiveMethod(c);
           System.out.println(c); // print 5
          }
我相信你会发现两者的唯一区别是


使用int就像使用java原语一样,而Integer包含
wait()、notify()等方法,解析,hashcode
等…

你应该简化代码示例;递归是不相关的…@Oli上面的代码只是为了解释我的疑问。所以没有不相关的意义…你应该自己理解这一点。我应该说你的评论与这个问题无关。我之所以这么说是因为w当您试图理解一些您不理解的行为时,通常有助于将其简化为最简单的测试用例(即,消除与核心问题无关的一切)@OliCharlesworth我的观点是,像Integer、String等java对象是不可变的……我刚刚编辑了代码,没有考虑到它的兼容性。。。。