黑马程序员技术交流社区

标题: 能做对证明你理解了! [打印本页]

作者: 珞诗妍    时间: 2016-1-11 22:26
标题: 能做对证明你理解了!
  今天是萌新上课的第二天,运算符弄的有点手忙脚乱,看到这样一个题,看看同是新人你们有没有掉过这个坑!下面发题,答案不定时更新哦!
class Operator {
     public static void main(String[] args) {
          int a = 10;
               a = a++;
          int b = a;
           System.out.println(a+"-"+b);
     }
}
请问 最后的输出结果是多少!新人不要编译出来结果再回复哦!
作者: jidan    时间: 2016-1-11 22:34
a是11 b是10
作者: leleranran    时间: 2016-1-11 22:35
jidan 发表于 2016-1-11 22:34
a是11 b是10

然而编译的结果是a=10,b=10
作者: 珞诗妍    时间: 2016-1-11 22:36
jidan 发表于 2016-1-11 22:34
a是11 b是10

一瞅你就是跟我一样的萌新!{:2_30:}
作者: 伊丽莎白.大海    时间: 2016-1-11 23:10
我反正猜错了{:2_31:}
作者: 珞诗妍    时间: 2016-1-12 22:12
我还是说下答案吧,其实是  10-10,中间的 -  不能少哦
作者: jacky左    时间: 2016-1-12 23:50
卧槽掉坑了,这题可以.就是不太理解
作者: qt520    时间: 2016-1-13 10:10
a = a++a++这个表达式的值为10,自增的a仅为返回值,用代码看更直观
实际上过程为
  1. int temp = a;
  2. a++;
  3. a = temp;
复制代码






作者: 随缘的影子    时间: 2016-1-13 10:43
还是不是很明白,求楼主讲解,顺便一提我也是即将上课的萌新
作者: Clouddd    时间: 2016-1-13 11:25
其实现在学基础,教程都会跟你们解释i++和++i的区别,相信大家都知道。只不过这个代码涉及到的知识面目前超出了你们的范围,听听就行,不要纠结。以后编码多了深入了你们自己自动会去了解的。
a = a++,首先理应来说是将a 赋值给 a然后 a 再自增吧,但是,在java运算符优先级里面,++是比=要高级的,所以尴尬的java只是先临时开辟个内存空间保存a的值,然后a自增,再从刚刚的临时空间把值取出来,赋值给a。
就有点像楼上说的:
int temp = a;
a++;
a = temp;
所以这道题答案是10-10
好了,你们不需要纠结为什么,学基础就先知道i++和++i的执行顺序就可以啦
作者: 清野    时间: 2016-1-13 12:49
学习了,膜拜大神 Org




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2