>  기사  >  백엔드 개발  >  값 유형 객체의 두 가지 표현

값 유형 객체의 두 가지 표현

零下一度
零下一度원래의
2017-06-23 15:40:281575검색
1. 값 유형 개체에는 unboxed와 boxed의 두 가지 표현이 있습니다. 반대로 참조 유형은 항상 boxed 형식입니다.
2. 값 유형은 System.ValueType에서 파생됩니다. 이 형식은 System.Object와 동일한 메서드를 제공합니다. 그러나 System.ValueType은 Equals 메서드를 재정의하고 두 개체의 필드 값이 완전히 일치하는 경우 true를 반환할 수 있습니다. 또한 System.ValueType은 GetHashCode 메서드를 재정의합니다. 이 재정의된 메서드가 사용하는 알고리즘은 해시 코드를 생성할 때 개체의 인스턴스 필드 값을 고려합니다. 이 기본 구현에는 성능 문제가 있으므로 고유한 값 유형을 정의할 때 Equals 및 GetHashCode 메서드를 재정의하고 명시적인 구현을 제공해야 합니다.
3. 값 유형을 기본 유형으로 사용하여 새 값을 정의할 수 없습니다. type 또는 New 참조 유형이므로 값 유형에 새로운 가상 메소드를 도입해서는 안 됩니다. 모든 메소드는 추상화할 수 없으며 모든 메소드는 암시적으로 봉인됩니다(재정의 불가능).
4, 참조 유형의 변수에는 힙이 포함됩니다. 객체의 주소 안에 . 참조 유형 변수는 생성 시 null로 초기화되며, 테이블 이름은 현재 유효한 개체를 가리키지 않습니다. null 참조 유형 변수를 사용하는 뷰는 NUllReferenceException을 발생시킵니다. 반대로 값 유형 변수는 항상 기본 유형의 값을 포함하며 값 유형의 모든 멤버는 0으로 초기화됩니다. 값 유형 변수는 포인터가 아니며 값 유형에 액세스하면 NullReferenceExcption 예외가 발생할 수 없습니다.
5 , 값 유형 변수 다른 값 유형 변수에 할당하면 필드별 할당이 수행됩니다. 참조 유형 변수를 다른 참조 유형 변수에 할당하면 메모리 주소만 복사됩니다
6. 두 개 이상의 참조가 힙의 동일한 객체를 참조할 수 있으므로 한 변수에 수행된 작업이 참조된 다른 객체에 영향을 미칠 수 있습니다. 반면에 값 유형 변수는 자체 포함되어 있으며 값 유형 변수에 대해 수행된 작업은 다른 값 유형 변수에 영향을 미칠 수 없습니다. unboxed 값 유형은 힙에 할당되지 않으므로 값 유형 변수가 정의되면 예제 메서드는 더 이상 활성 상태가 아닌 경우 가비지 수집을 기다리는 대신 할당된 저장소가 해제됩니다

위 내용은 값 유형 객체의 두 가지 표현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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