[java] Java에서 x ++와 ++ x 사이에 차이점이 있습니까?

Java에서 ++ x와 x ​​++ 사이에 차이점이 있습니까?



답변

++ x는 사전 증가라고하고 x ++는 사후 증가라고합니다.

int x = 5, y = 5;

System.out.println(++x); // outputs 6
System.out.println(x); // outputs 6

System.out.println(y++); // outputs 5
System.out.println(y); // outputs 6


답변

++ x는 x 값을 증가시킨 다음 x를 반환합니다.
x ++는 x 값을 반환 한 다음 증가합니다.

예:

x=0;
a=++x;
b=x++;

코드가 실행 된 후 a와 b는 모두 1이되지만 x는 2가됩니다.


답변

이를 접미사 및 접두사 연산자라고합니다. 둘 다 변수에 1을 더하지만 명령문의 결과에는 차이가 있습니다.

int x = 0;
int y = 0;
y = ++x;            // result: y=1, x=1

int x = 0;
int y = 0;
y = x++;            // result: y=0, x=1


답변

예,

int x=5;
System.out.println(++x);

인쇄 6하고

int x=5;
System.out.println(x++);

인쇄 5됩니다.


답변

나는 그것의 최근 dup 중 하나에서 여기에 도착했다. 그리고이 질문은 대답 이상이지만, 나는 코드를 디 컴파일하고 “아직 다른 대답”을 추가하는 것을 도울 수 없었다 🙂

정확하고 (아마도 약간 현명한)

int y = 2;
y = y++;

다음으로 컴파일됩니다.

int y = 2;
int tmp = y;
y = y+1;
y = tmp;

javacY.java수업의 경우 :

public class Y {
    public static void main(String []args) {
        int y = 2;
        y = y++;
    }
}

그리고 javap -c Y, 다음 jvm 코드를 얻습니다 ( Java Virtual Machine Specification 의 도움으로 주요 방법에 대해 주석을 달 수 있음 ).

public class Y extends java.lang.Object{
public Y();
  Code:
   0:   aload_0
   1:   invokespecial  #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_2 // Push int constant `2` onto the operand stack. 

   1:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.

   2:   iload_1  // Push the value (`2`) of the local variable at index `1` (`y`)
                 // onto the operand stack

   3:   iinc  1, 1 // Sign-extend the constant value `1` to an int, and increment
                   // by this amount the local variable at index `1` (`y`)

   6:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.
   7:   return

}

따라서 드디어 :

0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp


답변

컴퓨터가 실제로하는 일을 고려할 때 …

++ x : 메모리에서 x로드, 증가, 사용, 메모리에 다시 저장.

x ++ : 메모리에서 x를로드하고, 사용하고, 증가시키고, 메모리에 다시 저장합니다.

고려 : a = 0 x = f (a ++) y = f (++ a)

여기서 함수 f (p)는 p + 1을 반환합니다.

x는 1 (또는 2)입니다.

y는 2 (또는 1)입니다.

그리고 거기에 문제가 있습니다. 컴파일러 작성자가 검색 후, 사용 후 또는 저장 후 매개 변수를 전달 했습니까?

일반적으로 x = x + 1을 사용하십시오. 훨씬 간단합니다.


답변

Java에서는 x ++와 ++ x 사이 에 차이가 있습니다.

++ x는 접두사 형식입니다.
변수 표현식을 증분 한 다음 표현식에서 새 값을 사용합니다.

예를 들어 코드에서 사용되는 경우 :

int x = 3;

int y = ++x;
//Using ++x in the above is a two step operation.
//The first operation is to increment x, so x = 1 + 3 = 4
//The second operation is y = x so y = 4

System.out.println(y); //It will print out '4'
System.out.println(x); //It will print out '4'

x ++는 접미사 형식입니다.
변수 값은 표현식에서 처음 사용 된 다음 연산 후에 증가합니다.

예를 들어 코드에서 사용되는 경우 :

int x = 3;

int y = x++;
//Using x++ in the above is a two step operation.
//The first operation is y = x so y = 3
//The second operation is to increment x, so x = 1 + 3 = 4

System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4' 

이것이 분명하기를 바랍니다. 위의 코드를 실행하고 재생하면 이해하는 데 도움이됩니다.