이것은 실제로 이전에 질문 한 질문과 관련되어 있지만이 세부 사항에 매달려 있습니다. Java 1.4로 제한되어 있으므로 int
유형을 Object
으로 변환하려고합니다. Integer
클래스 객체를 실제로 사용해야합니까, 아니면 직접 캐스팅 할 수있는 방법이 있나요 (1.4에서는 자동 복싱이 없습니다). 이 "수동 복싱"비용은 제 3 층에서 제 1 층으로 전체 클래스를 가져 오는 것보다 가치가 있으며 따라서 커플 링이 증가합니까?Java 1.4 : 기본 유형을 객체로 캐스팅 (Coupling vs Performance?)
답변
Java 1.4에서 객체 기반 트윈으로 변환하는 간단한 방법은 없지만 속도가 빠르고 느립니다. new Integer(int)
이 느리면 Integer.valueOf(int)
이 빠릅니다. 다른 모든 숫자 유형에 대해서도 마찬가지입니다.
Java 5에서는 코드가 많이 필요하지 않지만 내부적으로 컴파일러는 자동 저장을 사용할 때 valueOf()
에 대한 호출을 삽입합니다.
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;
나는 그 정도를 알았다. 그러나 증가하는 결합보다 더 나은 Integer를 사용하고 있습니까? Object [] (정수 및 문자열로 변환 될 수 있음) 또는 전체 클래스를 전달할 수 있지만 3 층에서 1 층으로 클래스를 가져와야합니다. 어느 것이 더 낫습니까? 성능 저하가 크지 않을 것이라고 생각하기 때문에 디커플링을 선호하지만, 자바 전문가는 아닙니다. – makoshichi
커플 링은 아키텍처의 유연성에 영향을 미칠 수 있습니다. 그러나 java.lang의 클래스에 커플 링하는 것은 문제가되지 않아야하며 성능에 어떤 영향을 미칠 수 있는지 알지 못합니다. –
내가 말했듯이, 나는 Java 전문가가 아니며 임베디드 응용 프로그램을 사용하는 동안 성능이 매우 중요합니다. 하지만 저는 결국 Integer 객체를 사용할 것입니다. – makoshichi
* X가 느리고 * Y가 빠름 * 조금 너무 분류 적이기 때문에 나는 말할 것입니다. 대부분의 경우 (즉, 캐시 된 범위를 벗어난 값의 경우) 동일한 작업을 수행하며 (오버 헤드를 호출하는 valueOf 메서드가있는 경우) 'new Integer (int)'도 그렇게 느려서는 안됩니다. 최종 가변 메모리 장벽 여러 스레드를 사용하는 경우 사용자에게 피해를 줄 수 있습니다. –
'new Integer (int)'가 느리다는 생각은하지 않습니다 ... -128에서 127 사이의 캐시를 사용할 수 없으므로 메모리 효율이 떨어집니다. – ColinD
전체적으로 Integer 객체를 인스턴스화하는 것은 커플 링을 강화하는 것보다 낫습니다. – makoshichi