Java의 3차 연산자는 Java 7 이후 하나의 표현식만 평가합니다. Java 1.6 이하에서는 다른가요?
Oracle Certified Associate Java SE 8 Programmer 1 시험을 준비하던 중 공식 스터디 가이드의 삼원 표현에 대해 다음 단락을 발견했습니다.
삼원식 평가
Java 7에서는 3진 연산자의 오른쪽 식 중 하나만 런타임에 평가됩니다.단락 연산자와 유사한 방법으로, 3진 연산자의 2개의 오른쪽 식 중 하나가 부작용을 수행한다면, 런타임에는 적용되지 않을 수 있다.다음 예제를 사용하여 이 원리를 설명하겠습니다. [...]
2개의 식 중1개만 평가된다고 되어 있습니다.다음의 예를 나타냅니다.
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
여기만y
증가하지만z
예상하신 것처럼 그렇지 않습니다.
제가 우연히 발견한 것은 'Java 7의 경우'라고 써있는 단락의 첫 부분(노란색으로 표시됨)입니다.Java 1.6에서 같은 코드를 테스트했는데 동작의 차이를 찾을 수 없습니다.나는 Java 1.6이 문단에서 주어진 정보만으로 두 표현 모두를 평가할 것으로 기대했다."As Java 7..."에서 하고 싶었던 말이 뭔지 아는 사람?
편집: 혼동을 피하기 위해:결론부터 말하자면, 'Java 7의 경우'라고 쓰고 있는데, Java 6에서 Java 7로 전환할 때 3진 연산자와 관련하여 달라진 점이 있었습니까?
실행 시 조건식의 첫 번째 피연산자식이 먼저 평가됩니다.필요에 따라 결과에 대해 언박싱 변환이 실행됩니다.그 후 결과 부울값을 사용하여 두 번째 또는 세 번째 피연산자식을 선택합니다.
- 첫 번째 오퍼랜드 값이 true이면 두 번째 오퍼랜드 식이 선택됩니다.
- 첫 번째 오퍼랜드 값이 false일 경우 세 번째 오퍼랜드 식이 선택됩니다.
선택한 오퍼랜드 식이 평가되고 결과 값이 위에서 설명한 규칙에 의해 결정된 조건부 식 유형으로 변환됩니다.이 변환에는 박싱(55.1.7) 또는 언박싱 변환이 포함될 수 있습니다.선택되지 않은 피연산자 표현식은 조건식의 특정 평가에 대해 평가되지 않습니다.
1.0 이전의 JLS 에디션에서도 같은 문구가 사용되고 있습니다.Java 7에서는 동작이 변경되지 않았습니다.스터디 가이드의 문구가 서툴러졌을 뿐입니다.
저는 이 책의 저자 중 한 사람입니다.제가 그 문장을 쓴 것은 아니지만, 그 의도는 "이것은 Java 7에서 테스트되었습니다"였습니다.다른 판을 쓰게 되면 그것을 삭제하도록 메모해 두겠습니다.
확실히 하자면, 3진 연산자는 Java 8, 7, 6 등에서도 같은 동작을 하고 있습니다.그리고 만약 미래에 그것이 바뀐다면 나는 꽤 놀랄 것이다.
언급URL : https://stackoverflow.com/questions/29557106/ternary-operator-in-java-only-evaluating-one-expression-since-java-7-was-that
'programing' 카테고리의 다른 글
파일에서 특정 행(행 번호별)을 읽는 방법 (0) | 2022.09.11 |
---|---|
MySQL 8.x의 주요 버그 -- 외부 키 (0) | 2022.09.11 |
MariaDB 10.3에서 특정 사용자에 대한 외부 액세스 허용 (0) | 2022.09.11 |
"Type List 표현식에 선택되지 않은 변환 필요..."를 수정하려면 어떻게 해야 합니까? (0) | 2022.09.11 |
Android JSONObject - 플랫 JSON 객체를 루프하여 각 키와 값을 얻는 방법 (0) | 2022.09.11 |