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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾振凯 中级黑马   /  2013-3-25 19:15  /  3325 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾振凯 于 2013-3-25 21:55 编辑

int j,i=3;
j=(i++);
经过这样的运算以后j还是3,
感觉应该是4才对啊???????

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-25 21:13

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

21 个回复

倒序浏览
++在后面是先进行赋值运算,在进行自增运算,++前面才是先进行自增运算,再进行赋值运算的。
回复 使用道具 举报
lz括号加不加应该都是一样的、lz请看i++:
  1. int j,i=3;
  2. j=i++;
复制代码
上面代码等同于:
  1. int j,i=3;
  2. j=i;
  3. i=i+1;
复制代码
顺便说说++i:
j=++i;代码等同于:
  1. i=i+1;
  2. j=i;
复制代码

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
++i是先自增运算再赋值,i++是先赋值再进行自增运算。
回复 使用道具 举报
j=i++;是先将i的值赋给j然后i再+1
j=++i;是i先+1然后赋值给j
在这里括号加不加都是无所谓的,因为++的优先级比=高所以加了括号还是一样。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
int j,i=3;
j=i++;//当++在后面的时候是先赋值后相加,也就等于j=i; i++;
      //而当++在前面时事先运算然后在赋值,也就等于i++; j=i;

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
罗平 中级黑马 2013-3-25 20:37:54
7#

int j,i=3;
j=(i++);

这个是这样:
你首先得明白++i 和 i++的区别
i++  首先是将i的值赋j  ,让后i加一个1变成2 ,j=3,i=2
假如是这样  j=++i  这下j就是4,因为先将i加1,那么等号后面的式子就为4,再赋给j 这下j就是你认为的4.

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
第一你要看看优先级
第二 j = i++ 先赋值在运算
       j = ++i 先自增再运算
回复 使用道具 举报
刘海东 发表于 2013-3-25 19:26
++在后面是先进行赋值运算,在进行自增运算,++前面才是先进行自增运算,再进行赋值运算的。 ...

++在后面先赋值再运算?

那如果 a=1; a=a++ ;这时候 a 的值是多少呢?
暂且理解先赋值再运算 ,先赋值 a = a 也就是 a = 1,再运算 a=a+1 ????是这样么?
回复 使用道具 举报
贾文泽 发表于 2013-3-25 20:55
++在后面先赋值再运算?

那如果 a=1; a=a++ ;这时候 a 的值是多少呢?

先赋值a=a,这个时候a还是1。赋值完了之后,a自增,a变成了2。下次使用a的时候a就是2 了。
回复 使用道具 举报
关于自增自减的问题,你始终明确一点,你想要的是  i++ 或者 ++i 这个表达式的值,还是 i 这个变量的值?

i=1;  i++   //   i++ 这个表达式的值是 i 自增之前的值,也就是1, i 这个变量的值是自增后的值 ,也就是2
i=1; ++ i   //   ++i 这个表达式的值是 i 自增之后的值,也就是2, i 这个变量的值是自增后的值 ,也就是2

对于自减也是一个道理

比如说你的代码:
int j,i=3;
j=(i++);     //这里明显是需要 i++ 这个表达式的值,那 j 肯定等于 3
回复 使用道具 举报
刘海东 发表于 2013-3-25 21:00
先赋值a=a,这个时候a还是1。赋值完了之后,a自增,a变成了2。下次使用a的时候a就是2 了。 ...

你确定以及肯定?
要不你运行下试试看是多少?

哎,看都不用看,a还是1,多多理解。
回复 使用道具 举报
贾文泽 发表于 2013-3-25 21:08
你确定以及肯定?
要不你运行下试试看是多少?

也就是说,
int i=1;
i++;//这个语句里面i始终是1,下一个语句开始 i 就是2了。


int i=1;
++i;//这个语句里面 i 就已经是2了。
回复 使用道具 举报
刘海东 发表于 2013-3-25 21:18
也就是说,
int i=1;
i++;//这个语句里面i始终是1,下一个语句开始 i 就是2了。

还没明白? 看我11楼的解释

两种情况下,i 的值都会+1.
但是,++i 跟 i++ 这两个表达式的值是不一样的

i = i++; 这里需要的是把 i++ 这个表达式的值赋给 i ,又不需要 i
回复 使用道具 举报
贾文泽 发表于 2013-3-25 21:22
还没明白? 看我11楼的解释

两种情况下,i 的值都会+1.

我明白了,我试试用代码验证一下。赋的是表达式
回复 使用道具 举报
虽然"()"是优先级别最高的运算符,但控制不了"++"和"--";
这是sun公司定义的,死规定,没有为什么。

int j,i=3;
j=(i++);  
这里的括号其实是没有作用的,直接将i的值赋予j了然后打印了。
如果是++i,则值为4.
回复 使用道具 举报
贾文泽 发表于 2013-3-25 20:55
++在后面先赋值再运算?

那如果 a=1; a=a++ ;这时候 a 的值是多少呢?

a=1;
a=a++;
这个用反编译会看到:

常量1压栈
常量1出栈并赋值给变量a
再将a的值压栈(注意:这时候a值还是1)
变量a加1(这时候a就等于2啦)
之前进栈那个1出栈并再次赋值给a(a这个悲催的孩子又变成1啦)

看下面这段代码
int j=1;
for(int i=0;i<100;i++){
          j=j++;
}
System.out.println(j);//这时候j=1!!!!!!!!!!!!!!!
回复 使用道具 举报
贾振凯 发表于 2013-3-25 21:50
a=1;
a=a++;
这个用反编译会看到:

循环中是把 j++ 这个表达式的值赋给 j
所以,不管循环多少次,j 必须还是 1
回复 使用道具 举报
黄诗宾 发表于 2013-3-25 21:32
虽然"()"是优先级别最高的运算符,但控制不了"++"和"--";
这是sun公司定义的,死规定,没有为什么。

石松老师的原话啊呵呵!!!!!!!!11
回复 使用道具 举报
贾振凯 发表于 2013-3-25 21:53
石松老师的原话啊呵呵!!!!!!!!11

你是我们班的么?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马