これは、初期値Ingeterがnullの場合、ラッパークラスIngeter int型は、int型の初期値は0です。
パッケージcom.test; / ** * * @author 劉陵 * * / パブリック クラスTestInteger { / ** * @paramの引数 * / パブリック 静的 ボイドメイン(文字列[]引数){ int型 I 128 = ; 整数I2 = 128 ; 整数I3 = 新しい新しい整数(128 ); // 整数自動的にその真のように、int型の開梱 するSystem.out.println(I == I2); System.out.printlnは(I == I3)。 System.out.println( "**************" ); 整数I5 = 127; // Javaはコンパイル時に翻訳される- >整数I5 = Integer.valueOf(127 ); 整数I6 = 127 ; のSystem.out.println(I5、I6 ==)// 真の / * 整数I5 = 128; 整数I6 = 128; のSystem.out.println(I5 == I6); // falseに * / 整数II5 = 新しい新しい整数(127 ) のSystem.out.println(I5 == II5); // falseに 整数I7 = 新しい新しい整数(128 ); 整数I8 =新しい整数(123 ); System.out.println(I7 == I8)。 // 偽 } }
まず、行17と行18は、真へ出力されるため、INT整数の比とアンボクシング自動的に(上記JDK1.5)。
実際には、コンパイルのJava整数で場合I5 = 127、それが翻訳される- >整数I5 = Integer.valueOf(127 )、 そうキーはのvalueOf()の機能を見ることです。ただ、理解するソースコードののvalueOf()関数を見て。JDKソースこのような機能のvalueOf:
パブリック 静的整数のvalueOf(int型I){ アサート IntegerCache.high> = 127 。 もし(I> = IntegerCache.low && I <= IntegerCache.high) 戻り IntegerCache.cache [iが+を( - IntegerCache.low)]。 返す 新しい整数(I); }
我々はソースコードを見ると整数I5 = 127、127が次キャッシュ= 127、キャッシュから直接取得される整数I6を記述する場合-128と127の間の数のために、キャッシュすることができることは理解されるであろう新しいものではないだろう。25行動偽ながらだから、ライン22上の結果は、真です。
オブジェクトが同じではありませんので、27行と30行の場合、それは偽です。
次のように要約:
①いずれの場合においても、新たな整数と整数は等しくないであろう。ヒープし、開梱i3の基準点のプロセスを経て行くことはありません
数は-128から127の間であれば2は、整数のうち非新しいもの②、それは真、そうでない場合はfalseである
ときにJavaコンパイラの整数I2 = 128でした翻訳- >整数I2 = Integer.valueOf(128 ) とのvalueOf()関数は、-128と127キャッシュの間の数を有することになる
③両者のうち、偽に新しいされている
④int整数(新しいかどうNO整数は自動的に比率をintにアンボクシング行くので)比、それは、本当です