作者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)