2009-12-07 4 views
1

열거 형은 프로그래밍 언어에서 '배경 화면'으로 어떻게 작동합니까? 나는 각 언어가 이러한 데이터 유형을 표현하는 다른 방법을 가지고 있다고 생각한다. 자바에서열거 형 표현

당신은 예를 들어, == 연산자를 사용할 수 있습니다

public class TestEnum { 
    private enum Test { 
     foo, bar 
    } 

    public static void main(String[] args) { 
     System.out.println(Test.foo == Test.foo); // returns true 
    } 
} 

가 == 동안 원시로 변환 열거 형인가? 아니면 열거 형 값은 싱글 톤입니까? C#은 자바와 동일한 방식으로 열거 형을 사용합니까? 데이터베이스 열거 유형이 프로그래밍 언어와 다르게 취급됩니까?

답변

2

자바 enum들에 네임 스페이스 '테스트'를 추가 컴파일러와가 트릭 많은의 사용은 여전히 ​​개체 만 작업 할 수 있도록해야 ==. 원래 typesafe enum pattern (Effective Java 참조)은 약간의 통찰력을 제공 할 수 있지만 Enum.java source은 정확히 어떻게 작동하는지 보여줍니다.

0

저는 대부분의 언어가 enum을 int으로 변환한다고 생각합니다. 물론 그럴 필요는 없습니다.

예를 들어 위의 예에서 컴파일러는 두 값이 어떤 중간 표현으로 변환하지 않고 동일하다는 것을 인식하고 단지 true 값을 방출 할 수 있습니다.

0

.Net 언어는 정수 형태로 나타냅니다. 당신이

하면 1 == foo를 할 경우 , 이것은 반환해야 진정한

나는 보통이 이해하기 쉽게해야 할 것이 무엇 :

public enum Test 
    foo = 1 
    bar = 2 
end enum 

는, 한번 시도해 1을 변경하고 문자열 2 개. 이렇게하면 컴파일러 오류가 발생합니다.

0

저는 enum이 단순히 const 정수라고 생각합니다.

그래서 당신은

const int foo = 0; 
const int bar = 1; 

등 그

1

Java의 enum 형식은 실제로 산술 형식이 아닌 특수 컴파일러 생성 클래스입니다. enum 값은 equals 대신 참조를 비교하기 위해 전역 사전 생성 인스턴스로 동작합니다.

당신은 그것의 .class 파일 분해 확인할 수 있습니다 : 그것은 다음과 같은 자바 코드와 거의 비슷합니다

 
    Code: 
    0: getstatic  #2; //Field YourEnum.BAR:LYourEnum; 
    3: getstatic  #3; //Field YourEnum.FOO:LYourEnum; 
    6: if_acmpne  17  

:

enum YourEnum { 
    FOO, 
    BAR 
} 

// ... 
if (YourEnum.BAR == YourEnum.FOO) 

간단하게하기 위해 당신은 특별한로 생각할 수를 문자열 인계 인 경우