- 请问代码是否编译错误?
- 如果编译错误?是哪行?如果没有编译错误,结果是多少?
public class Demo {
public static void main(String[] args) {
int i= 5;
i+=i-=i*=i++;
System.out.println(i);
}
}
答案: -15
解析:
此题考的是Java运算符的优先级以及i++和++i的运算顺序。
+=,-=,*=都是从右向左的执行顺序,故此题运算顺序从右向左执行,依次为
i*=i => 5*5=25;
i-=25 => 5-25 =-20;
i+=-20 => 5+(-20)=-15;
此后 进行i++运算 i=6 (为什么呢?详情请看 i++运算实现)
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、– | 从右向左 |
| 3 | *、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | «、»、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |



