이 Java 코드의 출력을 설명해 주시겠습니까?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
두 경우 모두 출력은 20입니다.
이 Java 코드의 출력을 설명해 주시겠습니까?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
두 경우 모두 출력은 20입니다.
답변:
도움이 되나요?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
요점은 ++a
값 을 증가시키고 즉시 반환한다는 것입니다.
a++
또한 값을 증가 시키지만 (백그라운드에서) 변수의 변경되지 않은 값을 반환합니다. 나중에 실행되는 것처럼 보입니다.
int a = 1; int b = a++; int c = ++b;
포스트 증분이므로 b가 1이 될 것으로 예상했습니다.
++a
증분하고 변수를 사용합니다.
a++
변수를 사용한 다음 증분합니다.
당신이 가지고 있다면
a = 1;
그리고 당신은
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
codaddict는 특정 스 니펫을 설명 합니다.
두 경우 모두 먼저 값을 계산하지만 사후 증분에서는 이전 값을 유지하고 계산 후 반환합니다.
++ a
a ++
i = ++a + ++a + a++;
이다
i = 6 + 7 + 7
Working : a에서 6까지 증가 (현재 값 6) + a에서 7까지 증가 (현재 값 7). 합계는 이제 13입니다. a (= 7)의 현재 값에 더한 다음 a를 8로 증가시킵니다. 합계는 20이고 할당 완료 후 a의 값은 8입니다.
i = a++ + ++a + ++a;
이다
i = 5 + 7 + 8
Working : a의 시작 값은 5입니다. 덧셈에 사용하고 6 (현재 값 6)으로 증가시킵니다. +의 다른 피연산자를 얻으려면 a를 현재 값 6에서 7로 증가시킵니다. 합계는 12이고 a의 현재 값은 7입니다. 다음으로 a를 7에서 8까지 증가시키고 (현재 값 = 8) 이전 합계 12에 더하여 20을 얻습니다.
++a
a
평가되기 전에 증가 합니다.
a++
평가 a
하고 증분합니다.
주어진 표현과 관련 :
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
위에서 사용한 괄호는 Java에서 암시 적으로 사용됩니다. 이런 식으로 용어를 살펴보면 쉽게 알 수 있습니다. 둘 다 교환 적이므로 동일합니다.
당신이 의미한다고 가정
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
이것은 다음과 같이 평가됩니다.
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
그래서 나는 6 + 7 + 7 = 20이고 20이 인쇄됩니다.
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
그래서 나는 5 + 7 + 8 = 20이고 20이 다시 인쇄됩니다.
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
그리고 오른편을 모두 평가 한 후 (a에서 8로 설정 포함) THEN a는 6 + 7 + 7 = 20으로 설정되어 최종 시간에 20이 인쇄됩니다.
값 a
이 5이면 a++
표현식에 5를 제공하고 a
나중에 ++a
증가 하는 반면 a
, 숫자를 표현식에 전달하기 전에 증가 합니다 ( a
이 경우 표현식에 6이 주어짐).
그래서 당신은 계산
i = 6 + 7 + 7
i = 5 + 7 + 8
그러나 모든 진술을 결합하고 Java 8.1에서 실행하면 다른 답을 얻을 수 있다고 생각합니다. 적어도 내 경험이 말하는 것입니다.
코드는 다음과 같이 작동합니다.
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
사전 증가는 변수가 표현식에서 평가되기 전에 증가 함을 의미합니다. 사후 증가는 변수가 표현식에서 사용하기 위해 평가 된 후에 증가 함을 의미합니다.
따라서주의 깊게 살펴보면 세 가지 할당이 모두 산술적으로 동일하다는 것을 알 수 있습니다.
a=5; i=++a + ++a + a++;
이다
i = 7 + 6 + 7
작동 : 사전 / 사후 증가는 "오른쪽에서 왼쪽으로"연관성을 가지며 사전은 post보다 우선하므로 먼저 모든 사전 증가는로 해결됩니다 (++a + ++a) => 7 + 6
. 그런 다음 a=7
증분 => 7 + 6 + 7 =20
및 a =8
.
a=5; i=a++ + ++a + ++a;
이다
i=7 + 7 + 6
작업 : 전 / 후 증가뿐만 해결할 수 있도록 우선 이전 증분의 연관성 및 사전 "왼쪽에서 오른쪽으로 '포스트보다 우선 가지고 (++a + ++a) => 7 + 6
그 때는이 a=7
후 증가 제공 =>는 7 + 7 + 6 =20
와 a =8
.
이 모든 명령문을 다르게
실행하면 함께 실행하면 결과 => 38, 29
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)