黑马程序员技术交流社区

标题: 为什么会出现两种结果,求详细的解释! [打印本页]

作者: 飞一样    时间: 2013-12-26 23:08
标题: 为什么会出现两种结果,求详细的解释!
本帖最后由 飞一样 于 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, 下载次数: 5)

QQ图片20131226230656.jpg

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

QQ图片20131226230702.jpg

作者: litaojisuanji    时间: 2013-12-26 23:13
不同语言,编译器也不同,所做的处理,当然也不一样,结果不一样是正常的。。
建议:
      先学好一门语言,不要一下是钻这个语言,一下子钻那个语言,毕竟不是同一个语言,
肯定有些地方不一样,以后就会容易搞混。
     等把一门语言,学的非常非常精通了,再想学习其它语言也很快的。
作者: 由然自美    时间: 2013-12-26 23:14
++在前,打印的是自增后的值,++在后,打印的是自增的值.
作者: chinese    时间: 2013-12-26 23:26
c语言编译器最早用A语言写的。
Java编译器用c和c++写的。
编译器不同,运算不同
作者: 刘旭升    时间: 2013-12-27 09:32
我看了,感觉第二种情况比较合理。
关键是这句的理解:a = 10+a++;
这句话完全执行会出现两个“a”,运算顺序是①:a=10+a;然后是②:a=a+1;
escipe编译器:②中的a是①中a的副本,后面的运算不参与最后结果的运算,即时释放。
命令行:这样理解:它们都是同一个a,按照正常的执行顺序走下来就是:a=10+a,再对a=a+1,赋值。结果为41。
小结:第一种结果应该是处理第二种情况的:就是a++和++a在命令行中没有不同之处。
【错误总是不断,望大家多教诲!】
作者: chinese    时间: 2013-12-27 11:10
编译器不同




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