질문 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 클래스의 "autoboxing" 소스 코드입니다.
<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] 사이로 판단되면 정수 상수 풀에 있는 값이 이 범위에 없으면 새로운 Integer가 사용됩니다. ()가 생성됩니다. 따라서 이 질문의 f1과 f2는 모두 [-128,127] 범위에 있으며 상수 풀에서 동일한 값을 사용합니다. 그러나 f3과 f4는 [-128,127] 범위에 있지 않고, 그 값도 모두 새로운 것이므로 f3과 f4는 동일한 객체가 아닙니다.
질문 2:
Integer i의 기본값은 null입니다. i==0이 실행되면 등호 오른쪽이 숫자이므로 비교 연산을 수행하기 위해 Integer가 자동으로 unboxing됩니다(즉, Integer가 int 유형으로 변환됩니다). 분명히 null을 unbox하면(null을 숫자로 변환) NullPointerException이 보고됩니다.
위 내용은 Java 프로그래밍 예제 질문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!