经常有人问前后加相关的问题,我开始也很困惑,直到看到
这种写法的讨论。
- class Demo {
- public static void main(String[] args) {
- int i = 3;
- i=i++;
- System.out.println("i-->"+i);//i-->3
- i=++i;
- System.out.println("i-->"+i);//i-->4
- }
- }
复制代码
在eclipse下写这段代码, i=++i; 这行会出现一个warning: The assignment to variable i has no effect
变量的操作无效果 但是怎么个无效呢? i不是加1了吗?
我们知道 ++ 、= 都是操作符。
此处有两个操作符,编译器当然不可能视为一个。
既然++生效了, 那么“无效果 ”当然说的是=号操作了。
为什么呢?
在eclipse下写下面这句你就明白了:
又是一个 :
warning: The assignment to variable i has no effect
我们把i++、 ++i 操作符 当函数一样拆开来(使它们有各自返回值) 拆开来
i++:
{
temp=i;
i=i+1;
return temp;
}
++i :
{
i=i+1;
return i ;
}
(当然需要无视类型转换之类)
拆开之后 i=++i;当然就进行了i=i;操作 于是有warning了,值变了;
而i=i++; 没有warning ,值却没变。
而这样解释避免了之前许多绕头的顺序。
|
|