2011-03-16 4 views
3

이것은 실제로 이전에 질문 한 질문과 관련되어 있지만이 세부 사항에 매달려 있습니다. Java 1.4로 제한되어 있으므로 int 유형을 Object으로 변환하려고합니다. Integer 클래스 객체를 실제로 사용해야합니까, 아니면 직접 캐스팅 할 수있는 방법이 있나요 (1.4에서는 자동 복싱이 없습니다). 이 "수동 복싱"비용은 제 3 층에서 제 1 층으로 전체 클래스를 가져 오는 것보다 가치가 있으며 따라서 커플 링이 증가합니까?Java 1.4 : 기본 유형을 객체로 캐스팅 (Coupling vs Performance?)

답변

7

Java 1.4에서 객체 기반 트윈으로 변환하는 간단한 방법은 없지만 속도가 빠르고 느립니다. new Integer(int)이 느리면 Integer.valueOf(int)이 빠릅니다. 다른 모든 숫자 유형에 대해서도 마찬가지입니다.

Java 5에서는 코드가 많이 필요하지 않지만 내부적으로 컴파일러는 자동 저장을 사용할 때 valueOf()에 대한 호출을 삽입합니다.

+2

* X가 느리고 * Y가 빠름 * 조금 너무 분류 적이기 때문에 나는 말할 것입니다. 대부분의 경우 (즉, 캐시 된 범위를 벗어난 값의 경우) 동일한 작업을 수행하며 (오버 헤드를 호출하는 valueOf 메서드가있는 경우) 'new Integer (int)'도 그렇게 느려서는 안됩니다. 최종 가변 메모리 장벽 여러 스레드를 사용하는 경우 사용자에게 피해를 줄 수 있습니다. –

+0

'new Integer (int)'가 느리다는 생각은하지 않습니다 ... -128에서 127 사이의 캐시를 사용할 수 없으므로 메모리 효율이 떨어집니다. – ColinD

+0

전체적으로 Integer 객체를 인스턴스화하는 것은 커플 링을 강화하는 것보다 낫습니다. – makoshichi

2

Java 1.4 환경에서는 Object가 아니기 때문에 int를 Object로 형 변환 할 수 없습니다.

Java는 기본 유형과 참조 유형을 구분합니다. int는 기본 유형입니다. 따라서 boolean, byte, char, short, long, float 및 double이 있습니다.

참조 유형 값은 일부 개체에 대한 참조입니다. "개체"는 모든 개체의 루트 클래스입니다.

자바 1.5 이후에 오토 박싱은 두 번째 변수가 기본 변수 i과 동일한 값을 유지하는 Integer 객체를 가리 키도록합니다.

int i = 99; 
    Object o = (Object) i; 
+0

나는 그 정도를 알았다. 그러나 증가하는 결합보다 더 나은 Integer를 사용하고 있습니까? Object [] (정수 및 문자열로 변환 될 수 있음) 또는 전체 클래스를 전달할 수 있지만 3 층에서 1 층으로 클래스를 가져와야합니다. 어느 것이 더 낫습니까? 성능 저하가 크지 않을 것이라고 생각하기 때문에 디커플링을 선호하지만, 자바 전문가는 아닙니다. – makoshichi

+0

커플 링은 아키텍처의 유연성에 영향을 미칠 수 있습니다. 그러나 java.lang의 클래스에 커플 링하는 것은 문제가되지 않아야하며 성능에 어떤 영향을 미칠 수 있는지 알지 못합니다. –

+0

내가 말했듯이, 나는 Java 전문가가 아니며 임베디드 응용 프로그램을 사용하는 동안 성능이 매우 중요합니다. 하지만 저는 결국 Integer 객체를 사용할 것입니다. – makoshichi