2014-03-27 4 views
7

나는 두 개의 인수 메소드를 호출 하겠지만, 나는이 같은 ++ K를 사용합니다 : java에 메서드가 항상 왼쪽에서 오른쪽으로 순서가 지정되어 있습니까?

polygon.addPoint((int)rs.getDouble(k++),(int)rs.getDouble(k++)); 

는 사실 내가 JVM이 후, 첫 번째를 첫 번째 인수를 실행해야되고 싶어요. 어떻게 든 순서가 바뀌면 인수가 잘못된 순서로 전달됩니다.

고맙습니다.

+0

두 가지 정수를 만들기 이럴을 유지하기 위해이 코드를 더 쉽게 만들 것입니다 :

이 명시 적으로 순서를 보여 훨씬 청소기입니다. – sp00m

+0

주문이 보장되어야하지만, 특히 의존성을 없애기위한 간단한 방법이있는 경우이 방법에 의존하지 않아야합니다. – Thomas

답변

10

예, 인수는 왼쪽에서 오른쪽으로 평가되는 것이 보장됩니다. JLS 규칙을 준수하는 컴파일러는이를 준수해야합니다. 이것은 JLS §15.7.4 언급된다 : 방법 또는 생성자 호출 또는 클래스 인스턴스 생성 식에서

, 인수 식은 괄호 내에 표시 될 수 는 콤마로 분리된다. 각 인수 표현식은 오른쪽에있는 인수 표현식의 일부 앞에 평가 된 인 것처럼 보입니다.

+0

당신의 대답과 참조 주셔서 감사합니다. –

3

Java는 명명 된 매개 변수를 지원하지 않으므로 매개 변수의 위치가 올바르게 읽혀 졌는지 이해하고 있어야합니다.

예를 들어 시그니처 (int, String)가있는 메서드와 시그니처 (String, int)가있는 메서드를 서로 혼동하지 않으므로 Java는 매개 변수의 형식과 시퀀스를 고려하여 호출 할 메소드.

마찬가지로, 사용자의 방법에서는 항상 예측 가능한 균일 한 방식으로 매개 변수를 제공합니다.

그런 이유로 첫 번째 k ++는 항상 첫 번째 실행되고 두 번째 k ++는 항상 그 다음에 실행되며 이는 동작을 보장합니다.

+2

OP는 기본적으로 왼쪽 k ++가 올바른 k ++ 전에 실행될 것인지 묻습니다. 이 문제를 해결할 곳이 확실하지 않습니다. –

+0

피터, 당신 말이 맞아요, 나는 내 대답을 수정했습니다, 입력 해 주셔서 감사합니다. – Ewald

8

예, Java가이를 보증합니다. 그렇다고해서 이와 같은 코드를 사용하는 것이 좋은 생각은 아닙니다. 코드 독자는 완전히 혼란 스러울 수 있습니다.

int a = (int)rs.getDouble(k++); 
int b = (int)rs.getDouble(k++); 
polygon.addPoint(a, b); 
+6

+1 깨끗한 코드 접근법. –