코드를 살펴 보겠습니다.
Public Class Main {public static void main (String [] args) {Integer num1 = 100; 정수 Num2 = 100; 정수 Num3 = 200; 정수 num4 = 200; '' '// output result' '' 'system.out.println (num1 == num2); System.out.println (num3 == num4); }} 결과가 무엇인지 맞춰보세요?
많은 사람들은 결과가 사실이라고 생각하지만 결과는 다음과 같지 않습니다.
진실
거짓
이 결과는 왜입니까? 결과가 메모리로 설명되면 Num1과 Num2는 동일한 물체를 가리키고 Num3 및 Num4는 다른 물체를 가리 킵니다. 다음으로, 유형 정수의 가치의 소스 코드를 살펴 보겠습니다.
공개 정적 정수 값 (int i) {assert integercache.high> = 127; if (i> = integercache.low && i <= integercache.high) integercache.cache [i + 128]; 새로운 정수 (I)를 반환합니다. }IntegerCache의 구현 :
내부 클래스 인 ''// integercache는 그 속성이 정적 최종 '' '개인 정적 클래스 integercache {static final int high; '' '// 캐시 상한, 일시적으로 null' ''정적 최종 정수 캐시 []; '' '// 캐시 정수 배열' '' ''// 블록, 왜 블록으로 정의 되는가 '' '정적 {final int low = -128; '' '// 캐시 하한, 불변. 상한 만 변경할 수 있습니다`` '' '' '' '// 높은 값은 속성' '' '' ''// h 값으로 구성 될 수 있으며 JDK의 AutoboxCacheMax 매개 변수 (아래 설명이 있음)를 설정하여 조정할 수 있으며 자동 캐시 간격은 [-128, n]로 설정됩니다. 간격의 하한은 고정 된 int h = 127입니다. if (integercachehighpropvalue! = null) { '' '// long.decode 여기에서' '' '' '' ''// 초기화를 요구하는 메소드를 호출하지 않으려면 '' ''// integercachehighpropvalue를 디코딩하여 후보 상단 값을 얻음으로써``int i = '' long.decode (integercachehighpropvalue) .intvalue (); ``// 더 큰 것을 상한으로 취하지 만 정수의 경계보다 클 수는 없습니다. ''i = math.max (i, 127); '' '// 최대 배열 크기는 정수입니다 .max_value' ''h = math.min (i, integer.max_value - -low); } High = H; '' '// 상한이 결정됩니다' '' '' '' '// 캐시 블록을 만들고 캐시 어레이 크기에주의를 기울일 수 있습니다.' '캐시 = 새 정수 [(High -Low) + 1]; // int j = 낮음; for (int k = 0; k <cache.length; k ++) 캐시 [k] = 새 정수 (j ++); '' '// -128에서 높은 값으로 높은 값이 캐시 어레이에 하나씩 할당됩니다' '' '} private integercache () {}}이 두 가지 코드를 통해 값의 메소드를 통해 정수 유형 객체를 만들 때 값 범위가 [-128, 127]임을 알 수 있습니다. 이 간격으로 포인터는 integercache.cache에 이미 존재하는 객체 참조를 가리 킵니다. 값 이이 범위를 초과하면 새 개체가 생성됩니다.
주목할만한 점은 모든 유형 이이 범위에있는 것은 아니며 이중 유형을보십시오.
공개 클래스 메인 {public static void main (String [] args) {double i1 = 100.0; 이중 I2 = 100.0; 이중 i3 = 200.0; 이중 I4 = 200.0; System.out.println (i1 == i2); System.out.println (i3 == i4); }}최종 출력 결과 :
거짓
거짓
이것이 결과 인 특정 이유에 대해서는 소스 코드에서 Double Valuefof 메소드의 구현을 확인할 수 있습니다. 특정 범위의 정수 값의 수는 제한되지만 부동 소수점 수는 그렇지 않기 때문에 정수 값의 정수 값과 다릅니다.
정수, 짧은, 바이트, 문자 및 긴 가치의 가치 의 구현은 비슷합니다.
이중 및 플로트의 가치의 구현은 유사합니다.
하나를 뽑으면 부울 유형의 결과에는 두 개의 참 또는 거짓이 있습니다. 소스 코드를 직접 살펴보십시오.
공개 정적 부울 가치 (부울 b) {return (b? true : false); }true와 false는 다음과 같이 정의됩니다.
공개 정적 최종 부울 true = new boolean (true); ''/** '' '' '' ''** <code> 부울 </code> 객체에 해당하는 '' '' '' '' ''* value <code> false>. '' '' ''**/'' '' '' '' '' '' '' '*공개 정적 최종 부울 거짓 = 새로운 부울 (거짓);
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.