0

私は最近、このようなスニペットコードを書きました

public class TestIncrement {

    public static void main(String[] args){
        double a = 12.4; 
        double b = 5.6; 
        a -=b -=b -= b -= b -= b -= b;
        System.out.println(a);
        a-=b; 
        System.out.println(a); 
    }
}

出力は次のとおりです。

12.4
12.4

インクリメント演算子が機能しないのはなぜですか?

4

4 に答える 4

9

-=他のすべての代入演算子は右結合です。この行:

a -=b -=b -= b -= b -= b -= b;

「 6倍aの値で減少する」という意味ではありません。bこれは次と同じ意味です。

a -= (b -= (b -= (b -= (b -= (b -= b)))));

これは、「bの値だけb減少し、次にbの新しい値だけ減少しb、それをさらに 3 回行ってから、」aの最終値だけ減少することを意味しbます。b最初の の後は 0 である-=ため、ステートメントの残りの部分は何もしません。

a-=b;

ライン。

于 2013-09-08T23:41:57.067 に答える
2

それは機能します。変数bは 0 です。

于 2013-09-08T23:41:04.837 に答える
1

わかりやすくするために括弧を付けると、次のようになります。

public class TestIncrement {
    public static void main(String[] args){
        double a = 12.4; 
        double b = 5.6; 
        a -= (b -= (b -= (b -= (b -= (b -= b)))));
        System.out.println(a);
        a -= b; 
        System.out.println(a); 
    }
}

最初のb -= bステートメントは に設定bされ0ます。をさらに 4 回0減算した後も、結果は のままであり、明らかに の値は変更されません。再試行しても、行で同じ結果が得られます: .b0aa -= b12.4 − 0.0 = 12.4

于 2013-09-08T23:44:00.207 に答える