3

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オブジェクトもその値を維持する必要があります。

4

2 に答える 2

10

Java ラッパーの型は不変です。それらの価値観は決して変わりません。

counter++本当にcounter = counter + 1です。つまり、新しいオブジェクトが作成されます。

于 2012-06-24T12:23:22.713 に答える
-1

String 、 Integer などのオブジェクトの一部は、オブジェクトであっても不変です....

このリンクを試してください......

http://www.javaranch.com/journal/2003/04/immutable.htm

次のことをお勧めします......

         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
          }

両方を使用して見つけられると私が信じている唯一の違いは、

wait(), notify(),parsing,hashcode int の使用は、他の言語のように Java プリミティブを使用するようなものですが、Integer には次のようなメソッドが含まれています。

于 2012-06-24T12:23:36.563 に答える