簡體   English   中英

一個變量可以在一個語句中增加多少次?

[英]How many times could a variable be incremented in a single statement?

我目前正在閱讀Barry Burd的Java for Dummies,並進行了此小練習。

練習是關於后期和后期遞增。 在問題中(請參閱代碼),我能夠找出除最后一行之外的所有代碼行的答案(無需編譯器的幫助)。 到目前為止,根據我對后期/預增量的了解,這沒有任何意義。

請告知結果如何或為何不符合我的預期。

我嘗試初始化並聲明值為“ 20”的新變量(int),然后執行“ i = i ++ + i ++”,但仍然收到相同的結果(41)。

還嘗試執行out.println(i)兩次,但仍然打印41。

import static java.lang.System.out;

public class Main
{
    public static void main(String[] args) {

        int i = 10;
        out.println(i++); //10(post11)
        out.println(--i); //10(pre11-1)

        --i; //9(pre10-1)
        i--; //9(post8)
        out.println(i); //8
        out.println(++i); //9(pre8+1)
        out.println(i--); //9(post8)
        out.println(i); //8
        i++; //8(post9)
        i = i++ + ++i; //i = 9(post10) + 10(pre9+1) = 19(post20)
        out.println(i);  //20
        i = i++ + i++; //i = 20(post21) + 20(post21) = 40(post42)
        out.println(i); //41 (result copied from compiler)  

    }
}

我希望最后一行打印42而不是41,因為“ 20”被添加了兩次,並且也被增加了兩次。

i = i++ + i++

計算結果為(如果i為20):

i = 20 + 21

由於第一個i++是后運算符,因此不會對其產生影響。 但是,它確實會影響i的下一次使用。

我將按步驟進行分解:

i = i++ + i++; i == 20

i = 20 + i++i == 21

i = 20 + i++i == 21

i = 20 + 21i == 22

i = 41

當您使用賦值運算符(=)時,它是在后遞增運算符之后完成的。 因此,您得到以下信息:

int i = 10;
i = i++;
System.out.println(i); // print 10

當您在同一行中兩次使用后遞增時,該行完成后不會增加,而是在指令完成后(指令為i ++)增加。 因此,在執行i = i ++ + i ++時; 您實際上是在這樣做:

i = i++ + i++; // i=20 Original code
i = 20 + i++;  // i=21 The first i++ return 20 then increment i to 21
i = 20 + 21;   // i=22 The second i++ return 21 then increment i to 22
i = 41;        // i=22 The addition is computed 
41;            // i=41 and assigne to i

所有這些都與運算符優先級有關。

您可以通過編寫自己的打印例程來查看正在發生的情況。

      int i = 9;
      i = print(i++) + print(++i); // i = 9(post10) + 10(pre9+1) = 19(post20)
      System.out.println("\n" + i); // 20
      i = print(i++) + print(i++); // i = 20(post21) + 20(post21) = 40(post42)
      System.out.println("\n" + i); // 41 (result copied from compiler)

      public static int print(int i) {
          System.out.print(" i = " + i + " ");
          return i;
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM