Soalan 1:
<code>public static void demo01() {<br> Integer f1 = 100, f2 = 100, f3 = 200, f4 = 200;<br> System.out.println(f1 == f2);<br> System.out.println(f3 == f4);<br>}</code>
Salin selepas log masuk
Soalan 2:
<code>private static Integer i;<br>public static void demo02() {<br> if (i == 0) {<br> System.out.println("A");<br> } else {<br> System.out.println("B");<br> }<br>}</code>
Salin selepas log masuk
Jawapan Soalan 1:
benar
salah
Jawapan Soalan 2:
NullPointerException
Analisis:
Soalan 1:
Berikut ialah kod sumber "autoboxing" dalam kelas Integer:
<code>public static Integer valueOf(int i) {<br> if (i >= IntegerCache.low && i <= IntegerCache.high)<br> return IntegerCache.cache[i + (-IntegerCache.low)];<br> return new Integer(i);<br>}<br></code>
Salin selepas log masuk
Nilai IntegerCache.low ialah -128, dan nilai IntegerCache.high ialah 127. Dalam erti kata lain, apabila Integer dikotak secara automatik, jika julat nilai integer dinilai antara [-128,127], nilai dalam kumpulan pemalar integer akan digunakan secara langsung jika ia tidak berada dalam julat ini, Integer baharu () akan diwujudkan. Oleh itu, f1 dan f2 dalam soalan ini kedua-duanya berada dalam julat [-128,127] dan menggunakan nilai yang sama dalam kolam malar. Walau bagaimanapun, f3 dan f4 tidak berada dalam julat [-128,127], dan nilainya adalah kedua-duanya baharu, jadi f3 dan f4 bukan objek yang sama.
Soalan 2:
Nilai lalai Integer i ialah nol. Apabila i==0 dilaksanakan, sebelah kanan tanda sama ialah nombor, jadi untuk melaksanakan operasi perbandingan, Integer akan dinyahkotak secara automatik (iaitu, Integer akan ditukar kepada jenis int). Jelas sekali, jika anda menyahkotak null (menukar null kepada nombor), NullPointerException akan dilaporkan.
Atas ialah kandungan terperinci Analisis Soalan Contoh Pengaturcaraan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!