본문 바로가기
자바

문자열에서 switch 문을 사용할 수없는 이유는 무엇입니까?

by º기록 2021. 4. 14.
반응형

이 기능이 나중에 Java 버전에 넣을 것입니까?

누군가가 기술 방법 Java의 switch 명령문에서 기술을 설명 할 수없는 이유를 설명 할 수 있습니까?

 

해결 방법

 



string 사례가있는 switch 가 컴파일하는 동안 두 개의 스위치로 변환됩니다.첫 번째는 각 문자열을 고유 한 정수 & mdash로 매핑합니다. 원래 스위치의 위치.이것은 레이블의 해시 코드를 처음 전환하여 수행됩니다.해당 케이스는 문자열 평등을 테스트하는 문을 이라면 입니다.해시에 충돌이있는 경우 테스트는 계단식 if-else-else-else-else-else-else-else-else-else-else-else-else-else입니다.두 번째 스위치는 원래 소스 코드에서 원래 소스 코드에서 미러링되지만 케이스 레이블을 해당 위치로 대체합니다.이 두 단계 프로세스를 사용하면 원래 스위치의 흐름 제어를 쉽게 보존 할 수 있습니다.


상수가 조밀 한 경우 인덱스로 사용됩니다 (가장 낮은 값을 뺀 후) 명령어 포인터 & mdash 테이블로 사용됩니다. tableswitch 명령어.

상수가 스파 스가되면 올바른 케이스에 대한 이진 검색이 수행됩니다. lookupswitch 명령어입니다.

string 객체에서 switch 에서 switch 를 꺼내는 것, 두 명령어가 모두 사용될 것입니다. lookupswitch 는 해시 코드의 첫 번째 스위치에 적합하여 원래 위치를 찾습니다.생성 된 서수는 tableswitch 에 대한 자연스러운 적합입니다.



Pill p = Pill.valueOf(str);
switch(p) {
  case RED:  pop();  break;
  case BLUE: push(); break;
}

 

참조 페이지 https://stackoverflow.com/questions/338206

 

 

반응형

댓글