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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 飞一样 于 2013-12-27 11:09 编辑

一个案例:
class Demo1
{
        public static void main(String[] args)
        {        
                int a = 30;
                a = 10+a++;
                System.out.println("a="+a);
                int b =10+ ++a;
                System.out.println("b="+b);
        }
}
求输出a和b的值。
为什么会有两种答案

QQ图片20131226230656.jpg (55.47 KB, 下载次数: 7)

QQ图片20131226230656.jpg

QQ图片20131226230702.jpg (43.87 KB, 下载次数: 11)

QQ图片20131226230702.jpg

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 尽量上代码,不要上图片。

查看全部评分

5 个回复

倒序浏览
不同语言,编译器也不同,所做的处理,当然也不一样,结果不一样是正常的。。
建议:
      先学好一门语言,不要一下是钻这个语言,一下子钻那个语言,毕竟不是同一个语言,
肯定有些地方不一样,以后就会容易搞混。
     等把一门语言,学的非常非常精通了,再想学习其它语言也很快的。

评分

参与人数 1黑马币 +1 收起 理由
飞一样 + 1

查看全部评分

回复 使用道具 举报
++在前,打印的是自增后的值,++在后,打印的是自增的值.
回复 使用道具 举报
c语言编译器最早用A语言写的。
Java编译器用c和c++写的。
编译器不同,运算不同
回复 使用道具 举报
我看了,感觉第二种情况比较合理。
关键是这句的理解:a = 10+a++;
这句话完全执行会出现两个“a”,运算顺序是①:a=10+a;然后是②:a=a+1;
escipe编译器:②中的a是①中a的副本,后面的运算不参与最后结果的运算,即时释放。
命令行:这样理解:它们都是同一个a,按照正常的执行顺序走下来就是:a=10+a,再对a=a+1,赋值。结果为41。
小结:第一种结果应该是处理第二种情况的:就是a++和++a在命令行中没有不同之处。
【错误总是不断,望大家多教诲!】

评分

参与人数 1黑马币 +3 收起 理由
飞一样 + 3

查看全部评分

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