黑马程序员技术交流社区

标题: 关于前后加++的终极解释 [打印本页]

作者: cani1see    时间: 2015-4-24 02:38
标题: 关于前后加++的终极解释
经常有人问前后加相关的问题,我开始也很困惑,直到看到
  1. i =i++;
  2. i =++i;
复制代码

这种写法的讨论。
  1. class Demo {
  2.         public static void main(String[] args) {
  3.                 int i = 3;
  4.                 i=i++;
  5.                 System.out.println("i-->"+i);//i-->3
  6.                 i=++i;
  7.                 System.out.println("i-->"+i);//i-->4
  8.         }
  9. }
复制代码

在eclipse下写这段代码,  i=++i;  这行会出现一个warning:   The assignment to variable i has no effect
变量的操作无效果 但是怎么个无效呢? i不是加1了吗?
我们知道  ++  、= 都是操作符。
此处有两个操作符,编译器当然不可能视为一个。
既然++生效了, 那么“无效果 ”当然说的是=号操作了。


为什么呢?
在eclipse下写下面这句你就明白了:
  1. i=i;
复制代码
又是一个 :
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 ,值却没变。

而这样解释避免了之前许多绕头的顺序。


作者: cani1see    时间: 2015-4-24 02:50
其实我们可以把++i 叫新值自加、i++叫旧值自加
作者: 只吃饭不洗碗    时间: 2015-4-24 08:49
解释的不错 膜拜~
作者: 柒夜    时间: 2015-4-24 08:57
这样也很好解释




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2