繁体   English   中英

为什么相同的代码在java中的工作方式不同?

[英]why does the same code work differently in java?

我在java和C中编写了以下代码。但是这些程序的输出是不同的。 Java应用程序给出了21和C应用程序给出了22(我使用GCC编译器)。

你能描述一下吗?

这是JAVA代码。

class test
{

    public static void main(String args[])
    {
        int a =5;
        int b = (++a) + (++a) + (++a);
        System.out.println(b);
    }

}

这是C代码。

#include <stdio.h>

int main( int argc, const char* argv[] )
{
int a =5;
int b = (++a) + (++a) + (++a);
printf("%d \n",b);
}
int b = (++a) + (++a) + (++a);

这是C中未定义的行为 ,这意味着它可以输出21,22,42,它可以崩溃或做任何其他想做的事情。 这是UB,因为标量对象的值在同一表达式中不止一次更改而没有插入序列点

该行为在Java中定义,因为它具有更多序列点。 这是一个解释性的链接

在Java中,评估是从左到右 ,因此结果是一致的。 6 + 7 + 8 == 21

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM