最初にテスト結果を見てみましょう:
/*public static void main(string [] args){integer a = 128、b = 128;整数C = 127、d = 127; System.out.println(a == b); // false system.out.println(c == d); // true}*//*public static void main(string [] args){integer int1 = integer.valueof( "100"); integer int2 = integer.valueof( "100"); System.out.println(int1 == int2); // true}*/public static void main(string [] args){integer int1 = integer.valueof( "300"); integer int2 = integer.valueof( "300"); System.out.println(int1 == int2); // false}JDKのソースコードは次のとおりです。
public static integer valueof(string s)throws numberformatexception {return integer.valueof(parseint(s、10)); } public static integer valueof(int i){if(i> = integercache.low && i <= integercache.high)return integercache.cache [i +(-integercache.low)];新しい整数(i)を返します。 }内部に別の謎があることがわかりました、そして、整数のクラスがありました:
private static class integercache {static final int low = -128;静的な最終int high;静的最終整数キャッシュ[]; static {//高い値は、プロパティint h = 127で構成できます。 string integercachehighpropvalue = sun.misc.vm.getSavedProperty( "java.lang.integer.integercache.high"); if(integercachehighpropvalue!= null){try {int i = parseint(integercachehighpropvalue); i = math.max(i、127); //最大配列サイズはinteger.max_value h = math.min(i、integer.max_value-(-low)-1); } catch(numberformatexception nfe){//プロパティをintに解析できない場合は、無視してください。 }} high = h; cache = new Integer [(high -low) + 1]; int j = low; for(int k = 0; k <cache.length; k ++)cache [k] = new Integer(j ++); //範囲[-128、127]は内面化する必要があります(JLS7 5.1.7)Assert IntegerCache.high> = 127; } private integercache(){}}整数は、すべての整数を-128から127(調整可能)にインスタンス化することがわかりました。
これは答えを説明します。この範囲で作成する整数の数に関係なく、それらはすべて同じオブジェクトを生成するためにValueofを使用していることがわかります。
しかし、なぜJDKはこのようにそんなに多くのことをしなければならないのでしょうか?注意深く考えてみましょう。タオバオの製品のほとんどは、100元以下の価格です。 1日でバックエンドサーバーでいくつの整数が使用されますか? integercacheを使用すると、新しいものを取得する時間を短縮し、効率を向上させます。同時に、JDKはキャッシュを高値を構成可能に提供します。
これにより、間違いなく柔軟性が向上し、JVMの最適化が促進されます。
要約します
上記は、整数integercacheソースコードを読むことに関するこの記事のすべての内容です。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!