>Java >java지도 시간 >래퍼 클래스가 있음에도 불구하고 Java 프로그래머가 기본 유형을 선호하는 이유는 무엇입니까?

래퍼 클래스가 있음에도 불구하고 Java 프로그래머가 기본 유형을 선호하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-25 13:15:12471검색

Why Do Java Programmers Favor Primitive Types Despite the Existence of Wrapper Classes?

왜 프로그래머는 여전히 Java에서 기본 유형을 사용합니까?

Java 5에 박싱 및 언박싱이 도입되었음에도 불구하고 많은 개발자가 계속해서 기본 유형을 활용하고 있습니다. java.lang.Integer와 같은 해당 객체에 대응하는 int와 같은 기본 유형입니다. 이 관행은 객체 유형이 제공하는 추가 편의성을 고려할 때 왜 이런 일이 발생하는지에 대한 의문을 제기합니다.

Joshua Bloch의 "Effective Java"(항목 5: "불필요한 객체 생성 방지")에 설명된 대로 기본 형식의 사용은 상당한 성능상의 이점을 얻을 수 있습니다. 그의 코드 예제에서 Long 객체를 사용하여 long을 합산하는 데는 43초가 걸리는 반면, 프리미티브를 사용하면 프로세스가 6.8초로 가속화됩니다.

프리미티브 사용에 기여하는 또 다른 요인은 객체 유형의 기본 값 동일성이 부족하다는 것입니다. 동등성을 확인하려면 프리미티브에 사용할 수 있는 효율적인 == 연산자와 달리 장황한 equals() 메서드를 사용해야 합니다.

다음 코드 조각을 고려하세요.

class Biziclop {

    public static void main(String[] args) {
        System.out.println(new Integer(5) == new Integer(5)); // false
        System.out.println(new Integer(500) == new Integer(500)); // false

        System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true
        System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false
    }
}

출력에서 불일치가 드러납니다. new Integer()와 Integer.valueOf() 사이의 값이 동일합니다. JLS(Java 언어 사양)에서는 최소 256개의 정수 플라이웨이트([-128; 127]) 캐시가 필요하지만 JVM 구현자는 이 범위를 확장할 수 있습니다. 이는 특정 값이 일부 시스템에서는 캐시되지만 다른 시스템에서는 캐시되지 않아 예기치 않은 동작이 발생할 수 있음을 의미합니다.

위 내용은 래퍼 클래스가 있음에도 불구하고 Java 프로그래머가 기본 유형을 선호하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.