IT

Java 7 이후로 하나의 시스템 만 평가하는 Java의 삼항 연산자 -Java 1.6 이하에서는 달라졌습니까?

lottoking 2020. 8. 12. 07:24
반응형

Java 7 이후로 하나의 시스템 만 평가하는 Java의 삼항 연산자 -Java 1.6 이하에서는 달라졌습니까?


Oracle Certified Associate Java SE 8 Programmer 1 시험을 준비하면서 공식 학습 가이드에서 삼항 표현에 관한 다음 단락을 발견했습니다.

삼항 운용 평가
Java 7부터는 삼항 연산자의 적절한 작업 중 하나만 실행에 평가. 단락 연산자와 방식으로 삼항 연산자의 두 손을 사용 중 하나가 부작용을 수행하면 작동하지 않을 수 있습니다. 다음 예제 로이 원리를 설명해 봅시다 : [...]

다음 예제를 통해 두 식 중 하나만 평가된다고.

int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;

여기에서는 y예상 대로 증가 z합니다.

"As of Java 7 ..."이라는 단락의 시작 부분입니다. Java 1.6으로 동일한 코드를 테스트 한 동작의 차이를 수 없습니다. Java 1.6이 단락에 어떤 정보만으로 두 시리즈를 모두 평가할 예상했습니다. "As of Java 7 ..."로 무엇을 말하고 싶은지 아는 사람이 있습니까?

편집 : 혼동을 피하기 위해 : 'As of Java 7'을 작성하기 때문에 Java 6에서 Java 7로 전환 할 때 삼항 연산자와 관련하여 변경된 것이 있습니까?


저는이 책의 저자 중 한 명입니다. 내가 그 어떤 문장을 보강하도록 "이 자바 7에서 테스트"라는 문구를 동의합니다. 우리가 다른 판을 쓰면 그것을 제거 메모를 할 것입니다.

명확하게 말하면 삼항 연산자는 Java 8, 7, 6 등에서 방식으로 작동했습니다. 앞으로 변경 될 경우 상당히 놀랍습니다.


로부터 자바 6 JLS :

실행에 조건식의 첫 번째 피연산자식이 먼저 평가됩니다. 변환이 수행됩니다. 그런 다음 결과 부울 값을 사용하여 두 번째 또는 세 번째 피연산자 식을 선택합니다.

  • 첫 번째 피연산자의 값이 참이면 두 번째 피연산자식이 선택됩니다.
  • 첫 번째 피연산자의 값이 거짓이면 세 번째 피연산자식이 선택됩니다.

그런 다음 선택한 피연산자식이 평가되고 결과 값이 조건에 따라 한 규칙에 따라 결정된 조건의 유형으로 변환되었습니다. 이 변환에는 boxing (§5.1.7) 또는 unboxing 변환이 있습니다.선택하지 않은 피연산자 식은 조건식의 특정 평가에 대해 평가되지 않습니다.

1.0으로 돌아가는 JLS 에디션에도 문구가 나타납니다 . Java 7에서는 동작이 변경되지 않습니다. 스터디 가이드의 내용이 잘못되었습니다.

참고 URL : https://stackoverflow.com/questions/29557106/ternary-operator-in-java-only-evaluating-one-expression-since-java-7-was-that

반응형