A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cani1see 中级黑马   /  2015-4-24 02:38  /  483 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

经常有人问前后加相关的问题,我开始也很困惑,直到看到
  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 ,值却没变。

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

3 个回复

倒序浏览
其实我们可以把++i 叫新值自加、i++叫旧值自加
回复 使用道具 举报
解释的不错 膜拜~
回复 使用道具 举报
这样也很好解释
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马