لنرى نتيجة اختبار أولاً:
/*public static void main (string [] args) {Integer a = 128 ، b = 128 ؛ عدد صحيح C = 127 ، د = 127 ؛ system.out.println (a == b) ؛ // false system.out.println (c == d) ؛ // true}*//*public static void main (string [] args) {Integer int1 = Integer.valueof ("100") ؛ عدد صحيح int2 = integer.valueof ("100") ؛ System.out.println (int1 == int2) ؛ // true}*/public static void main (string [] args) {Integer int1 = integer.valueof ("300") ؛ عدد صحيح int2 = integer.valueof ("300") ؛ system.out.println (int1 == int2) ؛ // false}رمز المصدر لـ JDK كما يلي:
القيمة العددية الثابتة العامة (سلسلة S) يلقي numberformatexception {return integer.valueof (parseint (s ، 10)) ؛ } value static integer static (int i) {if (i> = integercache إرجاع عدد صحيح جديد (i) ؛ }لقد وجدت أن هناك لغزًا آخر في الداخل ، وكان هناك فئة integercache:
integercache integercache {static final int low = -128 ؛ ثابت النهائي int عالية. ذاكرة التخزين المؤقت الثابتة النهائية [] ؛ يمكن تكوين القيمة العالية {// عالية القيمة بواسطة الخاصية int h = 127 ؛ سلسلة 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 ، فتجاهلها. }} عالية = h ؛ ذاكرة التخزين المؤقت = عدد صحيح جديد [(ارتفاع - منخفض) + 1] ؛ int j = low ؛ لـ (int k = 0 ؛ k <cache.length ؛ k ++) ذاكرة التخزين المؤقت [k] = عدد صحيح جديد (j ++) ؛ // Range [-128 ، 127] يجب أن يتم استيعابها (JLS7 5.1.7) تأكيد integercache.high> = 127 ؛ } integercache () {}}اتضح أن عددًا صحيحًا يثبت جميع الأعداد الصحيحة من -128 إلى 127 (قابل للتعديل).
هذا يفسر الجواب. اتضح أنه بغض النظر عن عدد الأعداد الصحيحة التي تنشئها في هذا النطاق ، فإنها تستخدم جميعها قيمة لإنتاج نفس الكائن.
ولكن لماذا يتعين على JDK أن تفعل الكثير بهذه الطريقة؟ دعونا نفكر في الأمر بعناية. يتم تسعير معظم منتجات Taobao تحت 100 يوان. كم عدد الأعداد الصحيحة التي سيتم استخدامها في خادم الواجهة الخلفية في يوم واحد؟ باستخدام integercache ، فإنه يقلل من الوقت للحصول على جديد ويحسن الكفاءة. في الوقت نفسه ، توفر JDK أيضًا ذاكرة التخزين المؤقت ذات القيمة العالية القابلة للتكوين.
هذا بلا شك يحسن المرونة ويسهل تحسين JVM.
لخص
ما ورد أعلاه هو كل محتوى هذه المقالة حول قراءة رمز مصدر INTEGER INTEGERCACHE ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!