Java에서 ++ x와 x ++ 사이에 차이점이 있습니까?
Java에서 ++ x와 x ++ 사이에 차이점이 있습니까?
답변:
이를 접미사 및 접두사 연산자라고합니다. 둘 다 변수에 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
suffix
그래?
예,
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;
javac
이 Y.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'
이것이 분명하기를 바랍니다. 위의 코드를 실행하고 재생하면 이해하는 데 도움이됩니다.
예, 반환 된 값은 각각 증분 전후의 값입니다.
class Foo {
public static void main(String args[]) {
int x = 1;
int a = x++;
System.out.println("a is now " + a);
x = 1;
a = ++x;
System.out.println("a is now " + a);
}
}
$ java Foo
a is now 1
a is now 2
좋아, 나는 최근에 고전적인 스택 구현을 확인할 때 동일한 문제를 발견했기 때문에 여기에 도착했습니다. 이것은 연결된 목록보다 조금 더 빠른 스택의 배열 기반 구현에서 사용된다는 점을 상기시켜줍니다.
아래 코드, 푸시 및 팝 기능을 확인하십시오.
public class FixedCapacityStackOfStrings
{
private String[] s;
private int N=0;
public FixedCapacityStackOfStrings(int capacity)
{ s = new String[capacity];}
public boolean isEmpty()
{ return N == 0;}
public void push(String item)
{ s[N++] = item; }
public String pop()
{
String item = s[--N];
s[N] = null;
return item;
}
}
네, 차이가 있습니다. x ++ (postincrement)의 경우 x의 값이 표현식에 사용되고 x는 표현식이 평가 된 후 1 씩 증가합니다. 반면에 ++ x (preincrement), x + 식에 1이 사용됩니다. 예를 들어 :
public static void main(String args[])
{
int i , j , k = 0;
j = k++; // Value of j is 0
i = ++j; // Value of i becomes 1
k = i++; // Value of k is 1
System.out.println(k);
}
질문은 이미 답변되었지만 내 쪽에서도 추가 할 수 있습니다.
우선 ++ 는 1 씩 증가하고 - 는 1 씩 감소를 의미합니다.
이제 X ++ 수단 증가는 X 이 선 후에 ++ X 수단 증가는 X 이 행하기 전에.
이 예 확인
class Example {
public static void main (String args[]) {
int x=17,a,b;
a=x++;
b=++x;
System.out.println(“x=” + x +“a=” +a);
System.out.println(“x=” + x + “b=” +b);
a = x--;
b = --x;
System.out.println(“x=” + x + “a=” +a);
System.out.println(“x=” + x + “b=” +b);
}
}
다음과 같은 출력이 제공됩니다.
x=19 a=17
x=19 b=19
x=18 a=19
x=17 b=17
큰 차이가 있습니다.
대부분의 답변이 이미 이론을 지적 했으므로 쉬운 예를 지적하고 싶습니다.
int x = 1;
//would print 1 as first statement will x = x and then x will increase
int x = x++;
System.out.println(x);
이제 보자 ++x
:
int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);