java: how for loop work in the case of BigInteger

You use these syntax instead:
BigInteger i = BigInteger.valueOf(100000L);  // long i = 100000L;
i
.compareTo(BigInteger.ONE) > 0 // i > 1
i
= i.subtract(BigInteger.ONE) // i = i - 1
So here’s an example of putting it together:
    for (BigInteger bi = BigInteger.valueOf(5);
bi
.compareTo(BigInteger.ZERO) > 0;
bi
= bi.subtract(BigInteger.ONE)) {

System.out.println(bi);
}
// prints "5", "4", "3", "2", "1"
Note that using BigInteger as a loop index is highly atypical. long is usually enough for this purpose.

API links


The compareTo idiom

From the documentation:
This method is provided in preference to individual methods for each of the six boolean comparison operators (<==>>=!=<=). The suggested idiom for performing these comparisons is: (x.compareTo(y)0), where  is one of the six comparison operators.
In other words, given BigInteger x, y, these are the comparison idioms:
x.compareTo(y) <  0     // x <  y
x
.compareTo(y) <= 0 // x <= y
x
.compareTo(y) != 0 // x != y
x
.compareTo(y) == 0 // x == y
x
.compareTo(y) > 0 // x > y
x
.compareTo(y) >= 0 // x >= y
This is not specific to BigInteger; this is applicable to any Comparable in general.

Note on immutability

BigInteger, like String, is an immutable object. Beginners tend to make the following mistake:
String s = "  hello  ";
s
.trim(); // doesn't "work"!!!

BigInteger bi = BigInteger.valueOf(5);
bi
.add(BigInteger.ONE); // doesn't "work"!!!
Since they’re immutable, these methods don’t mutate the objects they’re invoked on, but instead return new objects, the results of those operations. Thus, the correct usage is something like:
s = s.trim();
bi
= bi.add(BigInteger.ONE);

http://stackoverflow.com/questions/3024186/java-how-for-loop-work-in-the-case-of-biginteger