【发布时间】:2016-04-24 14:16:13
【问题描述】:
我已经看到了很多关于这个主题的问题,但我仍然无法弄清楚以下是语义错误还是逻辑错误。
假设我有以下 Java 代码:
boolean a = false;
if (a = false) System.out.println("yes");
else System.out.println("no");
您可能已经看到我可能想写下== 而不是=,但是:程序编译得很好并且运行没有错误。但是,它确实没有给我预期的结果。
我在某处发现语义错误总是给出错误(在编译或运行时),所以这一定是一个逻辑错误。然而,另一个文本说语义错误并不总是给出错误。因此问题是:上面的例子是否包含语义或逻辑错误?
【问题讨论】:
-
这两个不是一回事吗?在我读到这些术语的每一个地方,似乎两者的定义都是程序在语法上是有效的(即它是一个有效的程序),但它并没有按照程序员的意图去做。
-
@LasseV.Karlsen 我最初也是这么想的,但实际上并非如此。此外,例如,如果
a是String,这将被视为语义错误。 -
@LasseV.Karlsen (据我了解,这是因为 pattern 是正确的,但情况(变量类型)不是。)
标签: semantics