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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 猎鹰tianya 中级黑马   /  2014-1-4 18:44  /  1911 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猎鹰tianya 于 2014-1-5 00:33 编辑
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1,y=3,z;
  6.                 z=y--/++x;
  7.                 System.out.println(z);
  8.         }
  9. }
复制代码

结果是1,很不理解啊!
不是说y--是先把y的值放临时存放起来,然后给y减1,参加运算的是y原来的值吗?
可是结果是1,我解释不了了,求解!!!:Q

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

7 个回复

倒序浏览
              z=y--/++x;
这时y--的值还是原值3     会在用过之后才会-- 成为2   
++x是先++也就变成了2  
所以就是  z=3/2;
最后结果也就是1了   

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
FFF + 1 很给力!
猎鹰tianya + 2 赞一个!

查看全部评分

回复 使用道具 举报
楼上,那个你的答案应该是错的吧.
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1,y=3,z;
  6.                 z=y--/++x;
  7.                 System.out.println(z);
  8.         }
  9. }
复制代码


对于z=y--/++x.是这样计算的.
先计算y--,这里楼上解释错了,自减在前在后的区别在于赋值.你这里是将自减后结果拿来运算,所以不管在前在后这里的结果都是2.
再计算++x,这里计算的结果为2.
最后z=2/2.为1.
并不是3/2.

评分

参与人数 1黑马币 +2 收起 理由
猎鹰tianya + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 猎鹰tianya 于 2014-1-6 10:00 编辑
高亮亮 发表于 2014-1-4 18:56
楼上,那个你的答案应该是错的吧.

:P呵呵,谢谢你的解答!
嘿嘿,在你的提醒下,我做了个测试,然后明白了,代码如下,结果为2,希望对你的理解也有帮助!:P:D
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1,y=4,z;
  6.                 z=y--/++x;
  7.                 System.out.println(z);
  8.         }
  9. }
复制代码
回复 使用道具 举报
int x=1,y=3,z;
z=y--/++x;
因为++,--自增自减运算符的优先级大于/的优先级,所以先执行++,--运算,
y-- 为后自增,先使用变量y的值,除法运行完后再自减1,
++x为前自增,x先自加1,后运行除法
所以运行过程等效于:
x=x+1;z=y/x;y--;
这就是程序的运行顺序

z的结果为3/2等于1

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
FFF + 1 赞一个!
猎鹰tianya + 2 很给力!

查看全部评分

回复 使用道具 举报
高亮亮 发表于 2014-1-4 18:56
楼上,那个你的答案应该是错的吧.

嗯,是我疏忽.自己绕进去了.
的确是不管怎么样,y都会变成2,但是拿来计算的值是自增自减前的3.
楼上那位兄弟,对不住了.
吸取教训
回复 使用道具 举报
int x=1,y=3,z;
                z=y--/++x;
y--结果是3                  
x++结果是2
3/2=1   因为你的基础数据类型是int类型 如果数据类型是double的话答案就是1.5了
y--是先运算 后自减
++x是先自加 后运算


~~!奋斗

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
FFF + 1 赞一个!
猎鹰tianya + 2 赞一个!

查看全部评分

回复 使用道具 举报
x y z是int类型的整数,参加运算的y的值是3,x的值是2,3/2=1.5又因为z是整型,所以z=1  我一直是这么理解的

评分

参与人数 1黑马币 +2 收起 理由
猎鹰tianya + 2 呵呵,我也这么理解的!!!

查看全部评分

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