[英]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.