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
。
私はその最近の子犬の 1人からここに着陸しましたのこの質問は答えられる以上のものですが、コードを逆コンパイルして「まだ別の答え」を追加せざるを得ませんでした:-)
正確であるために(そしておそらく、少し知識が豊富です)、
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仮想マシン仕様の助けを借りてmainメソッドにコメントすることを許可しました):
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
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'
これが明確であることを願っています。上記のコードを実行して再生すると、理解に役立つはずです。
はい。
public class IncrementTest extends TestCase {
public void testPreIncrement() throws Exception {
int i = 0;
int j = i++;
assertEquals(0, j);
assertEquals(1, i);
}
public void testPostIncrement() throws Exception {
int i = 0;
int j = ++i;
assertEquals(1, j);
assertEquals(1, i);
}
}
さて、私は最近クラシックスタックの実装を確認したときに同じ問題に遭遇したため、ここに着陸しました。これはスタックの配列ベースの実装で使用されていることを思い出してください。これはリンクリストの実装よりも少し高速です。
以下のコードで、プッシュとポップの機能を確認してください。
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);