2

私は違いを理解しようとしてindex = index--;おり、以下のコードブロックindex=--index;で代入の出力を確認しました(最初の例):index = index--;

public static void main(String[] args) {
    int index = 10;
    for (int i = 0; i < 10; i++) {
        index = index--;
        System.out.println("Index:" + index);
    }//end of for loop
}// end of main method

出力:

Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10

index=--index;割り当てを使用する場合(2 番目の例)

public static void main(String[] args) {
        int index = 10;
        for (int i = 0; i < 10; i++) {
            index = --index;
            System.out.println("Index:" + index);
        }
    }// end of main method

出力:

Index:9
Index:8
Index:7
Index:6
Index:5
Index:4
Index:3
Index:2
Index:1
Index:0

2 つの質問があります。2 番目の例では、Eclipse は警告をスローindex = --index;します。値を 1 減らします。Eclipse がこのような警告メッセージを表示するのはなぜですか?

最初の例では、変数は操作の影響を受けません (Eclipse は警告を出しません)。Eclipse にメッセージが表示されないのはなぜでしょうか。また、この割り当てが変数インデックスに影響を与えない理由がわかりません。index = index--;

4

6 に答える 6

4

問題は、課題の評価方法です。index = index--割り当ての右側が最初に評価されます。意味:

  1. index右辺の戻り値
  2. の値を減らしますindex
  3. indexの値を右側の値に設定します (これは、最初indexに返されたため、 の元の値です)
于 2013-01-09T20:42:20.373 に答える
4

と の両方=--の値を変更しますindex。Java の場合、は の--前に発生することが保証されている=ため、index = index--;の戻り値の場合--は の古い値でindexあり、 のデクリメントを上書きしますが、 の戻り値のindex場合はの新しい値が既にあるため、割り当ては効果がなく、減少したままです。index = --index;--indexindex

C のステートメントindex = index--;には未定義の動作があり、コンパイラはインデックスをデクリメントしたり、無視したり、ハードディスクを再フォーマットするコードを記述したりできることに注意してください (ただし、後者のケースは非常にまれです)。

于 2013-01-09T20:44:42.397 に答える
1
index = index--;

最初に左側のインデックスに値を割り当ててから実行する--と、結果が任意の変数に割り当てられます (メモリに残されます)。

例えば:

   index =10;

   index = index--;

最初に変数 index に値 10 を代入すると、次のようになります。

 `10--;`

上記のステートメントを指す変数がないことに注意してください。10-- は結果が 9 になり、メモリに残されますが、インデックス変数はステップ 1 で割り当てられた 10 を指します。

于 2013-01-09T20:41:11.887 に答える
1

1)index--後置操作です。これは、割り当てが同じ変数index = index--に以前の値を与えることを意味します。つまり、値は変更されません。indexindexindex

2)--indexは前置操作です。これは、最初に減少し、次に同じ変数indexに割り当てられることを意味します。index

于 2013-01-09T20:42:44.877 に答える
1

後置演算子 ( --) は、何をしていても後に発生します。そう:

index = index--;

  1. index の値を取得し、一時変数 (レジスタ) に入れます。
  2. そのレジスタ値をインデックスに割り当てます
  3. 一時レジスターをデクリメントします (何も行われないため、破棄されます)。

index =-- index;

  1. インデックスの値を取得し、一時レジスタに格納します
  2. レジスタをデクリメントします
  3. そのレジスタ値をインデックスに割り当てます

これらは同等であることに注意してください。

index =-- index; index = --index;

于 2013-01-09T20:43:52.130 に答える
0

インデックス = インデックス--;

翻訳先:

int temp = index;
index = temp;
temp = temp - 1;

ああ、私はそれが間違っていることを知っていました。以下の正しい翻訳:

int temp = index; 
index = index - 1; 
index = temp; 

クレジット: https://stackoverflow.com/users/1810525/mel-nicholson

于 2013-01-09T20:42:53.477 に答える