>Java >java지도 시간 >Java의 `switch` 문이 비컴파일 시간 상수를 사용할 수 없는 이유는 무엇입니까?

Java의 `switch` 문이 비컴파일 시간 상수를 사용할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-11 20:04:15948검색

Why Can't Java's `switch` Statement Use Non-Compile-Time Constants?

Java 스위치 문: 상수 표현식 요구 사항 이해

Java에서 스위치 문에는 케이스 레이블에 대한 상수 표현식이 필요합니다. Foo.BAR과 같은 상수는 상수처럼 보일 수 있지만 JLS(Java 언어 사양)에 정의된 컴파일 타임 상수로 간주되지는 않습니다. JLS §15.28에 따르면 상수 표현식은 컴파일 타임에 알려져야 합니다.

Foo.BA_가 컴파일 타임 상수가 아닌 이유:

Foo.BA_이지만 변수는 필드 초기화 후에 사실상 상수이므로 컴파일 타임 상수 초기화 프로그램이 없습니다. 컴파일 타임 상수를 만들려면 상수 표현식을 사용하여 변수를 명시적으로 초기화하세요. 예:

public static final int BAR = 1;
public static final int BAZ = 2;
public static final int BAM = 3;

Switch 문 대안:

int 상수 대신 열거형을 사용하는 것을 고려하세요. 그러나 열거형은 스위치 문이 모든 열거형 값을 포함하더라도 기본 사례를 요구하는 등 추가 제약 조건을 부과합니다. 또한 케이스 레이블은 열거형 값으로 평가되는 표현식이 아니라 명시적인 열거형 값이어야 합니다.

Switch 문의 상수 표현식에 대한 제한 사항:

switch 문에 사용되는 상수 표현식은 다음과 같습니다. 특정 제한 사항:

  • 기본 유형과 문자열만 허용됩니다.
  • 기본값은 리터럴, 상수 변수, 상수 표현식 주위의 괄호로 제한됩니다.
  • 대입 연산자, , -- 또는 인스턴스of를 제외한 연산자는 허용됩니다.
  • 유형 캐스트는 기본 유형 또는 문자열에만 허용됩니다.

요약하자면, Java에서 스위치 문을 사용할 때 다음을 확인하세요. 케이스 레이블의 표현식은 컴파일 타임 상수입니다. 대안으로 열거형을 고려하세요. 하지만 열거형의 고유한 제한 사항에 유의하세요. 이러한 요구 사항을 이해하면 코드의 신뢰성과 명확성이 향상됩니다.

위 내용은 Java의 `switch` 문이 비컴파일 시간 상수를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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