題目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>
題目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>
題目1答案:
true
false
題目2答案:
NullPointerException
解析:
題目1:
以下是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>
其中IntegerCache.low的是值是-128,IntegerCache.high的值是127。也就是說,Integer在自動裝箱時,如果判斷整數值的範圍在[-128,127]之間,則直接使用整數常數池中的值;如果不在此範圍,則會new 一個新的Integer() 。因此,本題f1和f2都在[-128,127]範圍內,使用的是常數池中同一個值。而f3和f4不在[-128,127]範圍內,二者的值都是new出來的,因此f3和f4不是同一個物件。
題目2:
Integer i 的預設值是null。執行 i==0 時,等號右側是數字,因此為了進行比較操作,Integer會進行自動拆箱(也就是將Integer轉為int型別)。很明顯,如果對null進行拆箱(將null轉為數字),就會報NullPointerException。
以上是Java 程式設計實例題目分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!