簡體   English   中英

前/后自增運算符表達式 Java

[英]Pre/Post Increment operator expression Java

在 Java

int a=10;
a = a + ++a;
System.out.println(a);

它打印21 我知道它會打印22

我已經明白,由於'++'具有更高的優先級,所以它會首先被計算並且它會改變a的值,因為它是預增量的,所以變量'a'的增量會在那里發生,然后......稍后它應該加上 a 的最新值

如下所示:

a = a + 11; // (a is 11 after pre - increment)

所以,現在a = 11 + 11 = 22 ,但程序產生o/p = 21

意味着它沒有選擇 a 的最新值11 ,而是使用舊值10

a = 10+ 11 = 21

..有人可以解決我的疑問嗎?

如果答案包含任何書籍或 java 規范中的概念/參考,將不勝感激

  • i++ - 獲取然后遞增
  • ++i - 遞增然后得到
  • unary operations (++, !)具有最高優先級
  • 表達式從左到右求值(感謝user16320675
int i = 10;
System.out.println(i++);  // 10
System.out.println(i);    // 11
System.out.println(++i);  // 12
System.out.println(i);    // 12

在您的示例中:

int a = 10;
a = a + ++a; // -> 10 + (10 + 1), from left to right
System.out.println(a);  // 21

來自 Java 文檔

除了賦值運算符之外的所有二元運算符都是從左到右計算的; 賦值運算符從右到左求值。

因為 a =10,所以 a = 10 + 11 = 21。

為什么? 因為 a 的值為 10,因為你還沒有增加它,所以它保持在 10。

在 ++a 中,現在只有你增加它,然后變成 11。現在,a = 10 + 11 是 21。

暫無
暫無

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

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