簡體   English   中英

x + = ++ x相當於x = 2x + 1:為什么?

[英]x += ++x equivalent to x = 2x+1 : Why?

這個問題只是好奇心:我想知道x += ++x之后某些int x的值是什么?所以我試過了:

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

它打印出來:

21

在使用其他值進行一些測試后,它似乎等於x = 2x + 1。 為什么? 此行是否由編譯器解釋為字節操作? (順便說一下,x + = x ++似乎等於x = 2x)。

我不認為這是我在項目中使用的東西,但我很想知道為什么我得到這個結果。

謝謝你的任何解釋或提示

編輯:首先,感謝您的回答

我知道+=運算符是如何工作的,以及x++++x ,但由於某種原因,(完全邏輯和明顯的)結果對我來說似乎很奇怪我應該已經考慮過了,抱歉你的時間!

它的計算方法是

  • 第1步:x = x + ++ x
  • 步驟2:變為x = 10 +(遞增x)11

  • 第3步:最終結果存儲在x即21中

這是證明:

我創建了一個MainClass如下:

public class MainClass{
public static void main(String...s){
int x = 10;
x += ++x;
}
}

然后使用javap -c MainClass檢查字節碼

  public static void main(java.lang.String...);
    Code:
       0: bipush        10     // push 10 onto stack
       2: istore_1             // store 10 in local variable 1
       3: iload_1              // load local variable 1 (now 10) back to stack
       4: iinc          1, 1   //increment local variable 1 by 1
       7: iload_1              // load local variable 1  (now 11) back to stack
       8: iadd                 // add top 2 variable on stack ( 10 and 11)
       9: istore_1             // store 21 to local variable 1
      10: return
}

它關於運算符優先級以及如何評估和使用++xx++ ++x ,值x被增量,然后用如此++x變為11和這個x += ++x變為21 ,其是10 + 11

但是, x++表示使用x ,然后其值遞增

所以x+= x++意味着10 + 1020

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

x + = ++x在編譯器中計算為x = x + ++x => x = 10 + ++x => x = 10 + 11 => x = 21

看這里:-

x+=++x; this expression will be executed like x=x+(x+1) so x = 10 + 11

因此x = 21;

您需要了解預增量(++ x)和后增量(x ++)。 見下文

 int x = 10;
 if (x++ == 10 )
     System.out.println( "X is equal to 10");// this statement will print

在上面的if條件中它將執行為true,因為首先它將比較10 == 10然后x將增加1並且x將變為11。

現在看下面: -

   if (++x == 10 )
     System.out.println( "X is equal to 10");// this will not print if condition will tern false

在上面,如果條件x將被預先遞增,那么x將變為11,然后將進行比較,無論11 == 10,因此條件將失敗。

希望這會有所幫助。

++x將返回(x+1)值, x值也將增加1。

x++將返回(x)值, x值也將增加1。

所以

x+=++xx=x+(x+1) ,相當於x=2*x+1

x+=++xx=x+(x) ,相當於x=2*x

..... ++ x:首先計算x = x + 1,然后使用x進行比較或計算實際任務..... x ++:首先比較/計算實際任務,然后計算x = x + 1

暫無
暫無

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

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