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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 默默地回忆 中级黑马   /  2015-1-19 22:27  /  3766 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 默默地回忆 于 2015-1-20 22:25 编辑

今天学习了运算符,如果是不同的变量比如byte b=2;byte a=b++;知道a等于b的原值2,b本身加1等于3,但是用b=b++;后,b还是原值2,没变化为3,请问这个是什么原理?

评分

参与人数 2技术分 +1 黑马币 +7 收起 理由
张凯zk47 + 7 山寨
杨佳名 + 1

查看全部评分

23 个回复

倒序浏览
这个你可以自己敲出来比较一下
回复 使用道具 举报
java语言的问题 这个应该属于特例  如果你用C来做就是3了
回复 使用道具 举报
我已经敲了,就是知道结果,不知道原理
回复 使用道具 举报
你要看好哪个先运行哪个后运行,++b 则是你说的那种情况
回复 使用道具 举报
话说运算的时候不会转成int么
回复 使用道具 举报
a=b++;的意思就相当于 a=(byte)(b+1);
b++就是将b自增1然后赋给a,b仍为2,a为3

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
碎流 高级黑马 2015-1-19 22:58:40
8#
本帖最后由 碎流 于 2015-1-20 00:06 编辑

b = b++; 这也是java中比较难以理解的地方了.这里的 b先赋值给了b,但是b ++ 之后由于没有运算了,这个++并没有产生结果.int b=1;
                 b=b ++;  //这里结果是2.因为赋值给了自己,自己的值已经定了,++就没有效果.(难点)
                 //相当于魔兽里,自己都给自己顶了一个无敌,别人还能影响我吗?
                 System.out.println("b = " + b);
                 int a =  b ++;  //由于之前的 b ++中++ 没有效果,因此,这个a还是1
                 int c =  b ++;  //这里的b已经++ 过了,然后赋值给c,所以,c是2,然后再b ++;
                System.out.println("a = " + a);
                System.out.println("b = " + b);
                System.out.println("c = " + c);

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
1先计算表达式  b=b;然后b++; b++直接赋值给b  ,最后再完成表达式  b=b的赋值,
回复 使用道具 举报
朋好友 发表于 2015-1-19 22:59
1先计算表达式  b=b;然后b++; b++直接赋值给b  ,最后再完成表达式  b=b的赋值,

int b=2,b1;
                b=b++;

                //相当于
                //b=b;
                b1 = b;
                System.out.println(b);
                b++;
                b = b1;
                System.out.println(b);



算是猜测?
回复 使用道具 举报
=比++的优先级高  参与运算的时候会先把b的值赋给a,所以a得到的是b自增之前的2.   然后b在自增一,b就变成了3
回复 使用道具 举报
d7142947 发表于 2015-1-19 23:06
=比++的优先级高  参与运算的时候会先把b的值赋给a,所以a得到的是b自增之前的2.   然后b在自增一,b就变成 ...

b = b++;同理
回复 使用道具 举报
学习了。。。。。。。。。。。。。。。
回复 使用道具 举报
加号在后是先赋值再运算,在前面是先运算再赋值
回复 使用道具 举报
这是由于jvm在做运算导致的,我曾经对此问题进行过答复,个人觉得还行,有空整理下,看帖子吧!
回复 使用道具 举报
yang_zhi_xiang 来自手机 中级黑马 2015-1-20 11:07:11
16#
额,以前还没休息
回复 使用道具 举报
我自己打的例子,上下两个b的值一个是2,一个是3 A的值为2;这个说明,b++,b并没有做自增运算,而是直接将b的值保留了下来,所以a的仍是2;  ++b则是先将B自增然后在赋值给了B,所以b的值为3;
希望能帮楼主解决问题!
             int a ;
                int b = 2;
                b = b++;
                a = b;
                System.out.println(b);
                System.out.println(a);
                b = ++b;
                System.out.println(b);
回复 使用道具 举报
_kirito 发表于 2015-1-19 22:50
a=b++;的意思就相当于 a=(byte)(b+1);
b++就是将b自增1然后赋给a,b仍为2,a为3
...

++b是先自增再赋值。
b++是先赋值再自增。
回复 使用道具 举报
本帖最后由 fanshuai 于 2015-1-20 12:47 编辑

你要是非写成b=b++;
因为这条语句的执行顺序是先赋值再自增。
所以现将b原有的值赋给b,然后b+1
b+1之后就没有赋值过程。

你可以试一下:
byte a=2;
a=a++;
byte b=a;
System.out.println("a="+a+",b="+b);
结果a和b都是2
因为a=a++;先赋值再+1,+1并没有赋值,所以a的值一直是2

其实:
b=b++;没意义。
b++本身是先赋值再自增。
你写b=b++;显然是要先将b的值赋给b再让b自增。
而将b的值赋给b没意义,没人这样写。
一般写c=b++;是要先用c将b原来的值记录下来,再让b自增。
把c=b++;其实是两条语句的简写:c=b;  b=b+1;


回复 使用道具 举报
本帖最后由 传慈 于 2015-1-20 19:47 编辑

分成三步
1,int temp=b;
2,  b++;
3,  b=temp;

无标题.png (5.21 KB, 下载次数: 47)

无标题.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马