มาดูผลการทดสอบก่อน:
/*โมฆะคงที่สาธารณะหลัก (สตริง [] args) {จำนวนเต็ม a = 128, b = 128; จำนวนเต็ม c = 127, d = 127; System.out.println (a == b); // false system.out.println (c == d); // true}*//*โมฆะคงที่สาธารณะหลัก (สตริง [] args) {จำนวนเต็ม int1 = integer.valueof ("100"); จำนวนเต็ม int2 = integer.valueof ("100"); System.out.println (int1 == int2); // true}*/โมฆะคงที่สาธารณะหลัก (สตริง [] args) {จำนวนเต็ม int1 = integer.valueof ("300"); จำนวนเต็ม int2 = integer.valueof ("300"); System.out.println (int1 == int2); // false}ซอร์สโค้ดของ JDK มีดังนี้:
ค่าคงที่ของจำนวนเต็มสาธารณะ (สตริง s) พ่น numberFormatexception {return integer.valueof (parseint (s, 10)); } ค่าคงที่ค่าคงที่สาธารณะ (int i) {if (i> = integercache.low && i <= integercache.high) ส่งคืน integercache.cache [i + (-integercache.low)]; ส่งคืนจำนวนเต็มใหม่ (i); -ฉันพบว่ามีความลึกลับอีกข้างในและมีชั้นเรียนจำนวนเต็ม:
InteegerCache คลาสส่วนตัวแบบคงที่ {คงสุดท้าย int low = -128; int สุดท้ายคงที่สูง; แคชจำนวนเต็มสุดท้ายคงที่ []; {// ค่าสูงอาจถูกกำหนดค่าโดยคุณสมบัติ int h = 127; String IntegercachehighPropValue = sun.misc.vm.gm.getSavedProperty ("java.lang.integer.integercache.high"); if (IntegerCachehighPropValue! = null) {ลอง {int i = parseInt (IntegerCachehighPropValue); i = math.max (i, 127); // ขนาดอาร์เรย์สูงสุดคือจำนวนเต็ม max_value h = math.min (i, integer.max_value -(-low) -1); } catch (numberFormatexception nfe) {// ถ้าคุณสมบัติไม่สามารถแยกวิเคราะห์เป็น int ได้ให้ละเว้น }} สูง = h; แคช = จำนวนเต็มใหม่ [(สูง - ต่ำ) + 1]; int j = ต่ำ; สำหรับ (int k = 0; k <cache.length; k ++) แคช [k] = จำนวนเต็มใหม่ (j ++); // ช่วง [-128, 127] ต้องถูกทำให้เป็นภายใน (jls7 5.1.7) ยืนยัน Integercache.high> = 127; } Private IntegerCache () {}}ปรากฎว่าจำนวนเต็มอินสแตนซ์จำนวนเต็มทั้งหมดจาก -128 ถึง 127 (ปรับได้)
สิ่งนี้อธิบายคำตอบ ปรากฎว่าไม่ว่าคุณจะสร้างจำนวนเต็มจำนวนเท่าใดในช่วงนี้พวกเขาทั้งหมดใช้คุณค่าของการผลิตวัตถุเดียวกัน
แต่ทำไม JDK ต้องทำมากในลักษณะนี้? ลองคิดดูสิ ผลิตภัณฑ์ส่วนใหญ่ของ Taobao มีราคาต่ำกว่า 100 หยวน จะใช้จำนวนเต็มกี่ตัวในเซิร์ฟเวอร์แบ็กเอนด์ในหนึ่งวัน? การใช้ IntegerCache ช่วยลดเวลาในการรับใหม่และปรับปรุงประสิทธิภาพ ในเวลาเดียวกัน JDK ยังให้ค่าแคชสูงที่กำหนดค่าได้
สิ่งนี้จะช่วยปรับปรุงความยืดหยุ่นและอำนวยความสะดวกในการเพิ่มประสิทธิภาพของ JVM
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการอ่านซอร์สโค้ดจำนวนเต็มจำนวนเต็มฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!