Integerクラスの場合では-128〜127の256個の数字がキャッシュされているのでオブジェクト比較でtrueを返すことがある
new Integer(125)などで明示的にインスタンスを生成するとキャッシュは利用されない
Integer.valueOf(125)などコンストラクタを使用せずにインスタンスを取得するとキャッシュが利用される

オートボクシングを使ったコードがキャッシュを利用しているかどうかはコンパイラに依存する
JDKとEclipseのコンパイラではキャッシュを利用していることが逆コンパイルにより確認されている

上記の数値範囲に限ってキャッシュを使うことが言語仕様上に規定されている訳ではないので、キャッシュを前提としたコーディングは避けるべきである
つまり-128〜127の間の比較であってもオブジェクト比較は避けるべきである
equals()もしくはintValue()で比較すべきである

キャッシュの目的はFlyweightパターンにある通り、時間的コストとメモリを省力化するためのものである