는 다음과 같은 자바 코드의 실행의 보장 된 순서가 있습니까?시퀀스 포인트
Q
시퀀스 포인트
5
A
답변
13
예, 그렇습니다. JLS에서, 15.7 절 :
Java 프로그래밍 언어는 연산자의 피연산자가 특정 평가 순서, 즉 왼쪽에서 오른쪽으로 평가되는 것처럼 보입니다.
코드는이 사양에 결정적으로 의존하지 않는 것이 좋습니다. 코드는 각 표현식에 부작용이 많지 않은 경우, 가장 바깥 쪽 연산 인 경우 및 표현식의 왼쪽에서 오른쪽으로 평가 한 결과로 예외가 발생하는 코드에 정확히 의존하지 않는 경우에 더 명확합니다.
는 ...이진 연산자의 왼쪽 피연산자가 우측 오퍼랜드의 일부가 평가되기 전에 충분히 평가 될 것으로 보인다.
도 :
자바 프로그래밍 언어는 또한 &이 &, ||, 그리고 :) 나타나는 조건 연산자를 제외한 연산자의 모든 피연산자 (완전 어떤 부분 전에 평가하는 것을 보장? 작업 자체의
+0
당신을 읽고있는 대답은 내가 이미 알고 있다는 것을 기억하게합니다 :) – milan
Java는 메소드가 순서대로 호출되도록 보장하지만 결과에 영향을주지 않으면 CPU가로드 순서를 재 지정할 수 있습니다. 예를 들어 B가 캐시에 있지만 A가 아닌 경우 B가로드되기 전에 A가 완료 될 때까지 기다리지 않고 결과에 영향을 미치지 않도록합니다. –
이제 재미 있습니다. 이 두 기능에는 서로 다른 고전적인 부작용이 없습니다. 'getA()'는 실행하는데 약간의 시간이 걸리고,'getB()'는 거의 아무 작업도하지 않는 것입니다. 첫 번째 값이 반환 되 자마자 두 번째 값이 반환되는지 확인해야하므로 순서가 중요합니다. 물론 그것을 다시 작성할 수 있습니다. – milan