[英]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
,但由於某種原因,(完全邏輯和明顯的)結果對我來說似乎很奇怪我應該已經考慮過了,抱歉你的時間!
它的計算方法是
步驟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
}
它關於運算符優先級以及如何評估和使用++x
和x++
。 與++x
,值x
被增量,然后用如此++x
變為11
和這個x += ++x
變為21
,其是10 + 11
但是, x++
表示使用x
,然后其值遞增
所以x+= x++
意味着10 + 10
即20
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+=++x
與x=x+(x+1)
,相當於x=2*x+1
x+=++x
與x=x+(x)
,相當於x=2*x
..... ++ x:首先計算x = x + 1,然后使用x進行比較或計算實際任務..... x ++:首先比較/計算實際任務,然后計算x = x + 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.