추천, 2024

에디터의 선택

C #에서 복싱과 Unboxing의 차이점

C #에서는 모든 값 유형이 클래스 객체에서 파생됩니다. 따라서 객체 유형의 참조 변수는 다른 값 유형을 참조 할 수 있습니다. C #에서는 값 유형을 참조 유형에 연결하는 두 가지 방법 인 Boxing 및 Unboxing을 소개합니다. 권투와 Unboxing의 기본적인 차이점은 Boxing이 오브젝트 유형으로 값 유형을 변환하는 반면, Unboxing은 오브젝트 유형을 값 유형으로 변환하는 것입니다. 우리는 권투와 Unboxing 사이의 다른 차이점을 연구합시다.

비교 차트

비교의 근거권투언 박싱
기본객체 유형은 값 유형을 나타냅니다.boxed 객체에서 값을 검색하는 프로세스.
저장스택에 저장된 값은 힙 메모리에 저장된 객체로 복사됩니다.힙 메모리에 저장된 오브젝트의 값은 스택에 저장된 값 유형으로 복사됩니다.
변환암시 적 변환.명시 적 변환.
int n = 24;
object ob = n;
int m = (int) ob;

권투의 정의

권투는 값 유형을 오브젝트 유형으로 변환하는 프로 시저입니다. 여기서 값 유형은 스택에 저장되고 오브젝트 유형은 힙 메모리에 저장됩니다. 값 유형을 오브젝트 유형으로 변환하는 것은 암시 적 변환입니다. 개체에 직접 값을 할당 할 수 있으며 C #은 나머지 변환을 처리합니다. 예를 들어 권투를 이해합시다.

 int i = 24; 오브젝트 ob = i; // 정수 타입 n을 객체 유형 ob에 넣습니다. 또는 object ob1 = 21; // 여기 또한 객체 유형 ob1은 정수 유형을 참조합니다. 

위의 코드에서 값 24를 포함하는 정수 유형 i는 스택에 저장되고 객체 유형 ob에 복사됩니다. 객체 유형이 이제 정수 값을 참조합니다. 이제 "int i"도 값 24를 포함하고 "object type ob"도 값 24를 포함하지만 두 값은 서로 독립적입니다. 즉 i의 값을 변경하면 값이 변경되지 않습니다. ob의 값.

권투는 여분의 시간과 함께 추가 메모리를 소비합니다. 그 이유는 값 유형을 참조 할 새로운 객체가 힙에 메모리 공간을 할당해야하기 때문입니다. 그런 다음 스택에 저장된 값 유형의 값이 힙 메모리 위치의 객체 유형으로 이전됩니다.

언 박싱의 정의

권투의 반대는 Unboxing입니다. Unboxing은 객체 유형을 값 유형으로 변환합니다. Unboxing에서 힙에 저장된 박스형 객체 유형의 값은 스택에 저장된 값 유형으로 전송됩니다. 권투와 달리 Unboxing은 명시 적으로 수행되어야합니다. 오브젝트 유형은 값 유형으로 명시 적으로 3 스트되고 값 유형은 오브젝트 유형이 참조하는 값과 같아야합니다. 예를 들어 Unboxing의 개념을 이해해 봅시다.

 int i = 24; 오브젝트 ob = i; // 정수 타입 n을 객체 유형 ob에 넣습니다. int j = (int) ob; // 객체 유형 ob에 저장된 정수 값을 정수 유형 y에 unbox합니다. 

오브젝트 ob에 저장된 값은 오브젝트가 정수형 "j"를 참조하는 것과 동일한 유형으로 변환하여 검색됩니다.

Unboxing은 더 많은 메모리와 더 많은 시간을 소비합니다. 객체 유형을 언 박싱해야하는 경우 힙에 저장된 객체 유형의 값을 스택에 저장된 새 값 유형으로 전송해야합니다. 검색된 값을 가비지 콜렉션에 사용할 수있는 오브젝트 유형.

복싱과 언 박싱의 주요 차이점

  1. 복싱에서는 객체가 값 유형으로 참조됩니다. 반면에 박스형 객체에서 값을 다시 검색하는 프로세스를 unboxing이라고합니다.
  2. 스택에 저장된 값 형식은 힙 메모리에 저장된 개체로 복사됩니다. 반면에 박스 처리를 해제하면 힙 메모리에 저장된 객체가 스택 메모리에 저장된 값 유형으로 복사됩니다.
  3. 복싱은 암시 적 변환이지만 unboxing은 명시 적 변환입니다.

결론:

복싱과 언 박싱 모두 더 많은 시간과 메모리를 소비하며 계산 비용이 많이 든다. 또한 유형 안전성이 부족하고 런타임 오버 헤드가 증가합니다. 프로그램에서 복싱과 언 박싱을 과도하게 사용하지 않는 것이 좋습니다.

Top