문제

일부 언어에서는 유형이 "박스형"이라고 불리는 경우를 들었습니다.

Java에서는 "autoboxing"이라는 말을 들어봤습니다.이게 뭔가요?유형에 대한 래퍼 클래스가 있습니까?boxed 또는 unboxed 유형으로 작업하는 경우 내 코드는 어떻게 변경됩니까?

도움이 되었습니까?

해결책

일부 데이터 유형은 "원시"로 간주되며, 이는 물체처럼 취급되지 않으며 객체의 특성이 없습니다.

대부분의 플랫폼에서 정수 및 문자는 원시적이지만 박스형 유형의 예입니다.

복싱은 물체에 포장하여 물체의 동작을 의미합니다.

정확한 의미와 행동은 사용하는 언어에 따라 다릅니다. 일부 언어 (예 : Smalltalk ... 내가 할 때 적어도 Waaay가 다시 돌아 왔습니다 ...)는 원시 유형을 허용하지 않고 모든 것을 물체라고 생각하지만 결국에는 그와 관련된 성능 페널티가 있습니다. 오늘날 프로세서는 유용한 작업을 수행하기 위해 원시 번호와 원시 메모리로 작업해야합니다. 예를 들어 상자에 박스 된 두 개의 정수를 추가하려면 무대 뒤에서 "박스"유형으로 "박스"되어 숫자가 추가 된 다음 새 정수로 다시 박스를 넣습니다.

다른 팁

Java에 대한보다 구체적인 정보 :

Autoboxing을 사용하면 Java가와 같은 것을 자동으로 변환 할 수 있습니다 boolean 그리고 int 그들의 객체 버전에 Boolean 그리고 Integer 대부분의 경우 자동으로. 또한 반대가 발생할 수 있습니다.

예를 들어:

int a = 3; // no boxing is happening
Integer b = 3;  // newer versions of java automatically convert the int 3 to Integer 3
int c = b;  // these same versions also automatically convert Integer 3 to int 3

오토 옥스가없는 이전 버전의 Java는이 코드가 동일한 작업을 수행해야합니다.

int a = 3;  // works the same
Integer b = new Integer(3);  //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive

그러나 여전히 수동으로 일을 해야하는 시나리오가 있습니다. 예를 들어, 두 가지 방법이있는 수업이 있다고 상상해보십시오.

assertEquals(int a, int b);
assertEquals(Object a, Object b)

이제이 작업을 시도하면 다음과 같습니다.

Integer a = 3;
int b = 3;
assertEquals(a, b);  // this will not compile

이것이 작동하지 않는 이유는 그것이 Unbox 해야하는지 여부를 알 수 없기 때문입니다. a an int 또는 상자 b an Integer. 따라서 어떤 메소드 서명을 호출 해야하는지 모호합니다. 이것을 해결하려면 다음 중 하나를 수행 할 수 있습니다.

assertEquals((int) a, b);
assertEquals(a, (Integer) b);

예, 복싱은 값 유형을 가져 와서 참조 유형으로 포장하는 것을 의미합니다. Java가자가 옥싱을 도입 한 이후로 할 수 있습니다.

void foo(Object bar) {}
//...
    foo(1);

Java는 int 1을 자동으로 정수로 전환합니다. 이전 버전에서는해야합니다.

foo(new Integer(1));

Autoboxing은 제네릭으로 작업 할 때 Java에서 가장 유용합니다. 제네릭과 함께 프리미티브를 사용할 수 없으므로 INT를 목록에 저장하려면 List<Integer> ints를 목록에 박스에 넣습니다.

박스형 유형은 값이 힙의 블록에 할당되고 포인터를 통해 참조됨을 의미합니다.이는 추가 간접 비용을 들여 런타임 구현의 일관성을 유지하는 데 좋습니다(일반 기능 등을 더 쉽게 갖게 됩니다).

일반적으로 컬렉션으로 작업 할 때는 객체의 배열을 다루고 있습니다. Java와 같은 언어에는 원시와 객체 사이에 차이가 있습니다. 원시가 "박스형"인 경우, 본질적으로 원시 주위의 래퍼 일 뿐이므로 객체를 기대하는 나머지 프레임 워크와 잘 어울립니다.

오토 옥싱은 원시를 물체에 넣거나 객체에서 원시를 투명하게 끌어내는 행위 일 뿐이므로 직접 수행하는 추가 단계에 대해 걱정할 필요가 없습니다.

박스형 란 규칙적인 값 유형을 취하고 주변의 객체를 만들었 음을 의미합니다. 상자에 넣는 것과 같습니다. 이것은 객체를 구성하는 오버 헤드 때문에 일반적으로 피해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top