簡體   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