java assert给出了奇怪的结果

时间:2009-07-17 15:26:24

标签: java boolean assertions

以下java代码应该怎么做?

public class foo{
    public static void main(String[] args){
        boolean mybool=false;
        assert (mybool==true);
    }
}

这会引发断言错误吗?如果没有,为什么不呢? (我没有收到任何错误!)

4 个答案:

答案 0 :(得分:4)

运行程序时,必须通过在命令行中添加“-ea”来在Java VM中启用断言:

java -ea -jar myprogram.jar

答案 1 :(得分:1)

Java语言断言很奇怪。你必须在启动命令行时启用它们,我不喜欢它。

出于这个原因,我倾向于使用第三方库来做我的断言。 Apache Commons Lang(通过Validator类),Spring(通过Assert类)甚至JUnit4(通过Assert类)都提供此功能,无论VM设置如何,它都可以工作。当您使用Java5静态导入时,它们与java断言一样容易使用,而且它们更灵活,而且它们允许您在异常中指定错误消息。

答案 2 :(得分:0)

这应该是AssertionErors

如果您使用的是Eclipse,则需要打开断言。它默认禁用它们。

为此,请将-ea添加到JVM参数中。

答案 3 :(得分:0)

如果在程序中可以访问断言,则会生成信息。

如果断言被禁用(这是默认值),则断言语句将不是executet,而mybool的值将为false。

如果启用了断言(jvm参数-ea),断言将被执行,并且副作用mybool将被设置为true。

您可以使用它来强制启用或禁用断言。例如,如果没有启用断言,我的TestSuite中的Test会出现故障,以便在运行测试时强制断言始终打开。