10

return ステートメントにインクリメント操作が含まれている場合、return が最初に実行され、インクリメントされる前に値が返されることを学びました。別のステートメントで最初にインクリメントしてから戻ると、期待どおりに機能します。

private static int incrementIntV1(int a)
{
   return a++;
}

private static int incrementIntV2(int a)
{
    a++;
    return a;
}

public static void main(String[] args)
{
    int b = 6;

    System.out.println("Increment in return: " + incrementIntV1(b));
    System.out.println("Increment first, then return: " + incrementIntV2(b));
    System.out.println("Increment with addZero: " + incrementAddZero(b));
}   

return で何が起こっているので、式全体を評価する場合と評価しない場合がありますか? これは、インクリメント操作がどのように行われるかについて特別なことですか?

私が試してみると:

private static int incrementAddZero(int a)
{
    return a++ + addZero();
}

private static int addZero()
{
    System.out.print("addZero executes");
    return 0;
}

インクリメント操作はまだ行われていませんが、print ステートメントによって addZero メソッドが実行されることはわかっています。戻り前にインクリメントしないのに、戻り前に addZero メソッドを実行するのはなぜですか?

彼が理にかなっていることを願っています。ありがとうございます。

4

2 に答える 2

9

発生した動作は、return ステートメントとは関係ありません。これはポスト インクリメント オペレータの動作です。式はa++増加しますaが、 の前の値を返しますa

return a++;

と同等です:

int x = a++;
return x;

同様に、

return a++ + addZero();

と同等です:

int x = a++ + addZero();
return x;

または :

int x = a++;
return x + addZero();

a++aインクリメントされる前の値を返します。

return で何が起こっているので、式全体を評価する場合と評価しない場合がありますか?

return&&は、返される式全体を常に評価します (return ステートメントにandなどの短縮演算子が含まれていない限り||、しかしここではそうではありません) が、ポスト インクリメント演算子の評価はa++の古い値を返しますa

于 2016-01-08T14:13:06.447 に答える
2

Javaドキュメントから:

唯一の違いは、プレフィックス バージョン (++result) はインクリメントされた値に評価されるのに対し、ポストフィックス バージョン (result++) は元の値に評価されることです。単純なインクリメント/デクリメントを実行するだけであれば、どのバージョンを選択しても問題ありません。ただし、この演算子をより大きな式の一部で使用すると、選択した演算子によって大きな違いが生じる可能性があります。

于 2016-01-08T14:15:51.483 に答える