2012-02-13 3 views
0

같은 문장을 다음과 같이 두 가지 방법으로 작성할 수 있습니다. 다음과 같이 x 값에 대해 두 개의 출력을 제공하는 질문이 있습니다.자바의 배정 연산자

int x = 10; 
x = x*2+5; // Here the value of x is 25. 

x = 10; 
x *= 2+5; // Here the value of x is 70. 

그런 다음 5 다음 X 곱한 함께 2 추가 제 statemnt 5. 2. 추가 (2)를 곱하는 제 statemnt X는 1. 때문임을 알 수있다. 그러나 왜 이런 식으로 행동합니까?

+1

참고 사항 [* JLS §15.26 배정 연산자 *] (http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26). – trashgod

답변

3

참조 : Operator precedence in Java. *은 모두 보다 더 엄격하게 바인딩되며 둘 다 = 또는 *=보다 가볍습니다. 케이스 (2) 오퍼레이터 용

+0

+1은 "둘 다 = 또는 * =보다 엄격합니다."를 나타냅니다. – namalfernandolk

5

당신의 초 문이 동안 첫 번째 경우, 작업자가 적용되기 전에 연산자의 피연산자가 모두 완벽하게 평가하는 것이 바로 precedence.Java 보장 왼쪽에서 정상에

x = 10; 
x *= 2+5; 
x = x * (2+5); 

x = x * (2+5);로 평가됩니다 때문입니다.

<variable> <op>= <expression> 

다음 의미 :

<variable> = (<type>) (<variable> <op> (<expression>)) 

은 "가변"은 "종류"의 유형 및 "가변"이다

화합물 할당 연산자는 다음과 같은 구문을 가지고 한 번만 평가했다. 시맨틱 스에 함축 된 캐스트와 괄호에 주목하십시오. 여기서 "op"는 복합 대입 연산자 (*, %,/etc) 중 하나 일 수 있습니다. 복합 할당 연산자는 Java의 모든 연산자 중에서 우선 순위가 가장 낮기 때문에 할당하기 전에 오른쪽에있는 표현식을 평가할 수 있습니다.

+0

위에서 언급했듯이 이것은 분명하기 때문입니다. 1. 첫 번째 statemnt x에 2를 곱한 다음 5를 더합니다. 2. 두 번째 statemnt에 5를 2로 더한 다음 x로 곱합니다.하지만 제 질문은 왜입니까? 그것의 뒤에 행동 규칙은 무엇입니까? – namalfernandolk

+0

그것은 오른쪽 h 그리고 문장의 측면은 항상 먼저 실행됩니다. –

+0

@NamalFernando : 질문에 대한 trashgod의 설명을 참조하십시오. 이것이 연산자 정의 방법입니다. (이것은 C 언어로 작동하는 방식이기도합니다. 대부분의 언어가이 연산자를 빌려옵니다.) – casablanca

0
int x = 10; 
x = x*2+5; 



* has more precedence than + . So 10 * 2 + 5 = 25 


x = 10; 
x *= 2+5; 



+ have more precedence than *=. So the result is 70 

는 '='가장 낮은 어리 그래서 2 + 5 다음 평가 피연산자 갖는다 연산자 '* ='평가 (오퍼레이터 는 = '+'보다 낮은 어리 때문에). 해당 시간에만 ''연산자가 장면에 나타납니다. 따라서 10 * 7이 X에 할당됩니다.

1

첫 문장 x = x * 2 + 5에서 *가 +와 비교할 때 우선 순위가 높기 때문에 x = 25가됩니다. ; 당신의 초 문은 다음과 같이 X = X * (2 + 5) 평가 될 것이기 때문에 그래서 그것은

x=10*2 
x=20+5; 

처럼 evaulates 당신이 그것을 볼 수있는 두 번째 문에서

이 bracket.So openinng 브래킷을 가지고 (higer 우선 순위 * 처음 브래킷 데이터를 계산하는 .SO 비교 다음은 X에 거는 있습니다.

X=x*(2+5) 
x=10*7; 
0

이가이다 combining an arithmetic operator with the simple assignment operator to create compound assignments 예 간단한 할당 연산자, 연산자의 오른쪽에있는 값이 계산되고, 그 좌측의 오퍼랜드에 할당 된 예를 들어.. 분명히 7 x 값을 제공

int x = 2 + 5; 

.

복합 할당 연산자는 동일한 기본 아이디어를 따릅니다. 연산자 오른쪽의 값이 계산되고 복합 할당 연산자 (이 경우 기존 값인 x에 최종 계산 값 7을 곱한 값)