2013-02-11 52 views
-4

切入正題,答案是「s是20,t不能確定」。 我瞭解s是20的部分,但爲什麼t不能確定? 請幫幫我!考慮下面的代碼:「int s = 20; int t = s ++ + --s;」。 s和t的值是什麼?

+4

你在哪裏找到你給的答案嗎? – 2013-02-11 06:57:43

+1

't'可以確定:http://ideone.com/6ja0Kv – 2013-02-11 06:57:58

+2

您是否想過,哦,我不知道,試試看看? 「不能確定」是......廢話。 – 2013-02-11 06:59:22

回答

2
int s = 20; 
int t = s++ + --s; 

工作:增量(增量後)s到21(當前值20)+遞減(遞減)s到20(當前值20)。

So, t=20+20; 
And s =20; 

考慮到優先級和圓括號後,Java保證表達式將從左到右進行評估。例如,要評估eat()+ drink() - beMerry(),Java將首先評估eat(),然後drink(),然後執行加法,然後評估beMerry(),最後執行減法。 eat()在drink()之前被評估,因爲eat()在drink()的左邊,並且表達式從左到右被評估。這種保證是重要的,因爲eat()和drink()的調用可能有副作用,如果以相反的順序調用,副作用會有所不同。

+1

你可能想解釋一個小_why_你正在計算,因爲你這樣做(即從左到右,而不是左到的例子) – 2013-02-11 07:28:45

+0

@JoachimIsaksson我編輯了我的答案,如你所說。謝謝 – 2013-02-11 10:07:29

0

this

由於遞增/遞減操作者修改其操作數,使用的 這樣的操作數多於一次相同的表達式中可以產生 不確定的結果。例如,在諸如x - ++ x的表達式中,不應以什麼順序執行減法運算符和增量運算符 ,這是不清楚的。當編譯器應用 優化時,這種情況會變得更糟,這可能會導致 操作的執行順序與 程序員的預期不同。

現在,你的答案應該很清楚。 在我看來,t的值可能因編譯器/優化而異。

下面是更多的一些信息: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions

+3

這個答案適用於C/C++,但不適用於Java。 http://stackoverflow.com/a/4978933/477878 – 2013-02-11 07:12:30

相關問題