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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiangzi2008006 中级黑马   /  2013-9-1 15:13  /  1242 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiangzi2008006 于 2013-9-1 20:29 编辑

1.
int count = 0;
count = count + count++;
System.out.println(count);
2.
int count = 0;
count = count++ + count;
System.out.println(count);
3.
int count = 0;
for (int i = 0; i < 100; i++) {
count = count + count++;
}
System.out.println(count);
4.
int count = 1;
for (int i = 0; i < 100; i++) {
count = count + count++;
}
System.out.println(count);

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 范龙波 于 2013-9-1 16:07 编辑

优先级由高到低:
算术运算符
比较运算符
逻辑运算符:&& ,|| ,!
赋值运算符:= ,+=
(其它运算符: n++ n--  ! 这个比较特殊)
<br>
顺便把刚才做测试的两个小练习给你列出来你看一下\
练习 1
int b = 1;
if(3+4*2>10&& flag=true)  打印结果为true

练习 2
                int b = 5;
                b += b--; // 5+5
                System.out.println(b);
                b = 5;
                b += --b; // 5+4
                System.out.println(b);

                b = 5;
                b += ++b;// 5+6
                System.out.println(b);
                b = 5;
                b += b++; // 5+5
                System.out.println(b);

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
应该是先算count=count+count再算count++

点评

不知道 这么回答给不给分??.......  发表于 2013-9-1 16:42
回复 使用道具 举报
本帖最后由 Nero 于 2013-9-1 19:11 编辑

大哥
先说的你 1 2 题
1和2不一样吗  如果把count看做a,吧count++看做b,那么
a+b不就等于b+a,,小学一年级不就经常做 1+2=3  和2+1=3  这种题么

再说 你的 3 4 题
用了for循环
只是count的初始值不同罢了
就像..........
5=2+3  5=3+2

7=3+4  7=4+3
只是!!初始值不同而已哦!!....
不知道 这么回答给不给分??........




oh!~~~~    版主   I'm so sorry~~~~~

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 亲,不能再用小学生的思维啦!(1+1)!=2.

查看全部评分

回复 使用道具 举报
count++中的++是变量先参与运算然后再自加  

你先把变量运算的结果赋值给变量然后再自加嘛
回复 使用道具 举报
本帖最后由 第一印象 于 2013-9-1 17:15 编辑

第一个问题: 要明白count = count + count++的结果,首先要知道两个问题:
第一个是这个运算的运算顺序,第二个是count++操作做了什么事,对于运算顺序,肯定是先运算等式右边的
再赋值给左边的变量,右边的运算是从左到右算的,明白了这两个问题再来看题就不复杂了. count = count +
count++;先运算右边,右边从左到右算, 我们要是知道count++的结果就知道了右边的结果了,
count在跟左边的count运算之前,会先进行一个复制,将原来的值复制一份,然后它本身的原值会自增,
需要注意的是原值的自增跟复制后的数据是没有关系的,自增后,原值变成1了, 这时候进行count +
count++进行运算,但是count++参与运算的是复制出来的那份值而不是自增后的结果,
由于等式右边的左边的count是在count++运算前就有值的,所以它是0,而count++的结果是0,所以 就是 0 + 0,
然后将结果赋给了等式左边的count,结果打印就是0

第二个问题: 原理其实跟第一个问题差不多,但结果肯定是不一样的,因为等式右边的运算是要从左到右的,count++ + count,
count先复制一份数据也就是0出来,然后进行自增这时候原值变为1了,而count++参与运算用的是复制出来的0参与
运算的,所以count++ + count实际上就是 0 + 1,为什么这里是0+1而不是0+0呢,因为count++运算虽然用的是复制出来
的那份数据,但是它本身的值已经自增到了1,而count++右边的那个count拿的是自增后的原值也就是1, 所以这个打印结果是1

第三个问题: 如果你第一第二个问题已经看懂了,我相信第三个问题已经不言自明了,count = count + count++;打印的结果
其实就相当于count = count + count;虽然两者底层运算有点差异,但结果是一样的, 所以这个for循环不管有多少次
结果都是0 = 0 + 0,结果都打印为0

第四个问题: 原理也是一样的因为count = count + count++的结果就相当于count = count + count;
所以再来看第四个问题的结果就不为怪了,但是第四个问题有些人可能会感到奇怪,因为结果是0,如果我们自己算也会感到奇怪,
count首先等于1,for循环第一次1 = 1 + 1++结果为2(不解释了吧),再运算的数据会越来越大为什么会为0呢?
我也感到纳闷,但我知道一旦这个count有一次结构为0,后面的所有for循环计算出的结果都为0了,
所以我们找到为0的时候for循环中的i等于多少,
经测算i为31的时候,结果为0,而i为30的时候count等于-2147483648,二进制为
10000000000000000000000000000000,这时候count + count++, 就相当于count *2
了(两个相同的数据相加相当于乘以2, 这个不用解释吧),乘以2就相当于左移1位,结果为0,所以就出现了这样的结果了

点评

说的很好,学到了  发表于 2013-9-1 17:42

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2 很给力!

查看全部评分

回复 使用道具 举报 1 0
只要明白这个原理就好了!count = count + count++的结果就相当于count = count + count

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马