- 请问代码是否编译错误?
- 如果编译错误?是哪行?如果没有编译错误,结果是多少?
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 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |