语义或逻辑错误?

问题描述:

我在这个问题上看到了很多问题,但我仍然无法弄清楚以下是语义还是逻辑错误。
说我有下面的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

通过编写下面的表达式:a = false你基本上分配一个值为false的变量,它工作正常,并返回true作为成功的操作,这就是为什么你总是会在控制台中打印“是”的原因。

+1

你不仅没有回答他的问题,你的解释是什么if(a = false)'确实也是错误的。结果不是'true',因为赋值是成功的,它是'false',因为java中赋值表达式的值是赋值,所以它是'false'。 –

+0

@ LasseV.Karlsen是对的,我知道。你能否再次读这个问题,但更仔细一点? – SWdV