作者x000032001 (某數..失業中)
看板java
標題[問題] java有沒有未定義行為
時間Wed Oct 26 14:03:04 2011
在同一式子裡對變數超過一次的賦值
在java裡算是未定義行為嗎
如果不算的話 編譯後運算的順序是?
我在網路上查到java的作法是開一塊記憶體作暫存
那以我下面的這兩題來說 三個變數都同樣指向同一塊記憶體位置嗎
運算的順序是由左往右結合嗎
附上兩題我很想吐槽的題目...
請問以下程式的輸出為何
int a=85;
if (a++==85 && ++a==86 && --a==85)
System.out.print(a);
else
System.out.print(a);
int a = 5;
a = (a++) + (a++) + (++a);
System.out.println("a="+a);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.17.20.100
1F:推 LPH66:我記得 java 好像有規定這種東西的運算順序...要去翻 JLS 了 10/26 14:30
2F:推 lachtchlee:run 一下不就有結論了嗎 ? 10/26 14:32
3F:→ x000032001:所以...這算不算未定義行為 10/26 14:40
4F:推 LaPass:之前聽過這種題目的最中肯解答: 他媽的把這種敘述句給拆開 10/26 14:45
5F:→ lachtchlee:不算 你run它一千萬次 每次滾出來的數字都一模一樣y 10/26 14:46
6F:→ x000032001:這不能當理由吧 處理方式是編譯器決定 當然都一樣啊 10/26 14:47
7F:推 lachtchlee:未定義行為 可各出怪招 你說會大漲 它卻崩盤y 10/26 14:53
8F:→ luoqr:不要去研究這種寫法 太浪費生命了 正常人也不會這樣寫 10/26 19:31
我完全不想研究 寫過成千上萬行的code從來沒用過這種用法
可是該死的死大一遇到必修的基礎程式設計還是拿教授沒轍阿( ′-`)y-~
※ 編輯: x000032001 來自: 219.87.178.100 (10/26 21:34)