2016-04-24 112 views
1

我在這個問題上看到了很多問題,但我仍然無法弄清楚以下是語義還是邏輯錯誤。
說我有下面的Java代碼:語義或邏輯錯誤?

boolean a = false; 
if (a = false) System.out.println("yes"); 
else System.out.println("no"); 

你可能已經看到我大概想寫下來==代替=,而是:在程序編譯就好了,並沒有錯誤運行。但是,它確實沒有給我預期的結果。

我在某處發現語義錯誤總是給出一個錯誤(在編譯或運行時),所以這肯定是一個邏輯錯誤。然而,另一篇文章說,語義錯誤並不總是給出錯誤。因此問題是:上述示例是否包含語義或邏輯錯誤?

+0

這兩件事不是一回事嗎?在我讀到的關於這些術語的每一處,似乎兩者的定義都是程序在語法上是有效的(即它是一個有效的程序),但它並沒有做到程序員所期望的。 –

+0

@ LasseV.Karlsen我首先想到了同樣的事情,但事實並非如此。另外,例如,如果'a'是'String',這將被視爲語義錯誤。 – SWdV

+0

@ LasseV.Karlsen(據我所知,這是因爲_pattern_是正確的,雖然情況(變量類型)不是) – SWdV

回答

-1

通過編寫下面的表達式:a = false你基本上分配一個值爲false的變量,它工作正常,並返回true作爲成功的操作,這就是爲什麼你總是會在控制檯中打印「是」的原因。

+1

你不僅沒有回答他的問題,你的解釋是什麼if(a = false)'確實也是錯誤的。結果不是'true',因爲賦值是成功的,它是'false',因爲java中賦值表達式的值是賦值,所以它是'false'。 –

+0

@ LasseV.Karlsen是對的,我知道。你能否再次讀這個問題,但更仔細一點? – SWdV