2012-10-08 6 views
-8

내 코드 :이 신비한 코드는 무엇을합니까?

public void mysterious() { 
    int x = 1; 
    x = x++/++x; 
    System.out.println(x); 
} 

무슨 대답?

+4

것을 볼 것이다, 0으로 이어질 것입니다 1/3이 될 것입니다 왜 당신이'2'를 얻는지를 안다. –

+1

나는 0을 말할 뻔했다. 1/3은 0.33으로 int (이 경우)로 캐스트하면 0이된다. –

+2

'1/3'은 정수 나누기가 0이고 캐스팅이 필요 없다. ;) –

답변

0

이 표현식의 평가는 왼쪽에서 오른쪽으로 수행됩니다. 이 표현식은 증분 평가 후이 표현식과 같습니다.

x = 1/3; 

따라서 대답은 0입니다.

4
int x = 1; 
x = x++/++x; 
System.out.println(x); 

평가가 이루어집니다 왼쪽에서 오른쪽으로 : -

  • 먼저 X ++ 평가됩니다 .. 그래서, 그것은 것입니다 1 그런 다음 X 1 씩 증가됩니다
  • .. 들어 포스트 증분 ..
  • ++x 다음은 3 일 것입니다. (x는 x++ 이후에 증가했습니다)

그래서, 기본적으로, 당신의 위의 코드는 동일합니다 : - 위의 문을 중단하자 변수 x

x = x++/++x; 

의 정수 값 1

int x = 1; 
int a = x++; // a = 1, x = 2 
int b = ++x; // b = 3, x = 3 
x = a/b;  // x = 1/3 
System.out.println(x); // Prints 0 
0
public void mysterious() { 
    int x = 1; 
    x = x++/++x; 
    System.out.println(x); 
} 

x = 1; // 할당 2 diff 문으로.

x++ - 값 그때, 이제 2 정도로 후행는 X의 값은 1 씩 증가

x++ - 선행 증가, X의 값은 다시 한번 3 있도록 증가하고 좌측 (X)에 할당 지금.

System.out.println(x); 

그래서 대신 INT의 double를 사용하는 경우, 당신은 값이 그래서 '돈 예상대로 난 항상'0 '얻을 0.33333333

관련 문제