찾다

 >  Q&A  >  본문

关于java的自动装箱(autoboxing)和拆箱(unboxing)

PHP中文网PHP中文网2787일 전715

모든 응답(3)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-18 10:46:11

    우선 두 개의 (first == second)에 대해 첫 번째는 int(기본 유형)이므로 == 비교를 수행할 때 두 번째는 Integer에서 int까지 unboxing된 다음 == 값 비교를 수행합니다. - 두 값(첫 번째 값은 127, 두 번째 값은 128)이 동일하므로 두 시간 모두 true입니다.

    두 개의

    을 보면 두 번째와 세 번째는 모두 (second == third)(객체)이므로 ==를 비교할 때 비교되는 것은 두 참조가 동일한 메모리(the 동일한 객체)이면 Integer를 반환하고, 그렇지 않으면 true을 반환합니다. false
    과 같은 코드는 실제로 Java의 구문 설탕입니다. 실제로 실행되는 것은 second = 127;의 소스 코드를 살펴보겠습니다. second = Integer.valueOf(127)Integer.valueOf
    은 이해하기 쉽습니다.

    은 IntegerCache.low ~ IntegerCache.high의

    을 내부적으로 캐시하므로, 내가 전달한 정수 매개변수가 이 범위 내에 있으면 캐시된 객체가 반환되고, 그렇지 않으면 그냥 생성되었습니다. 새로운 Integer. Oracle JVM에서 Integer의 기본 캐시 범위는 -128 ~ 127입니다. 따라서 Integer을 호출할 때마다 동일한 캐시된 Integer이 반환되고, Integer.value(127)을 호출하면 매번 새로운 Integer이 생성됩니다. 따라서 첫 번째 Integer.value(128)는 true를 반환하고 두 번째는 false를 반환합니다. Integer(new Integer(128))

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:46:11

    두 개의 Ineger 유형을 ==로 비교합니다. 값이 -128~127 사이이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이는 Integer.valueof()의 버퍼 개체 때문입니다.

    으아악 으아악

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:46:11

    으아악

    • 오브젝트 간의 비교는 특정 범위 내의 버퍼링으로 인해 결과에 영향을 미칩니다.

    • 패키지 클래스(객체)와 기본 유형의 비교는 결과를 얻는 직접적인 비율입니다.

    회신하다
    0
  • 취소회신하다