java断言给出了奇怪的结果

java断言给出了奇怪的结果,java,boolean,assertions,Java,Boolean,Assertions,下面的java代码应该做什么 public class foo{ public static void main(String[] args){ boolean mybool=false; assert (mybool==true); } } 这是否应该引发断言错误?如果不是,为什么不是?(我没有收到任何错误!)这应该是抛出断言器 如果使用Eclipse,则需要打开断言。默认情况下,它会禁用它们 为此,在JVM参数中添加-ea。运行程序时,必须通

下面的java代码应该做什么

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

这是否应该引发断言错误?如果不是,为什么不是?(我没有收到任何错误!)

这应该是抛出断言器

如果使用Eclipse,则需要打开断言。默认情况下,它会禁用它们


为此,在JVM参数中添加-ea。

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

java -ea -jar myprogram.jar

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


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

这使得在程序中启用断言时可以访问信息

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

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


您可以使用它强制启用或禁用断言。例如,我的TestSuites中有一个测试,如果没有启用断言,该测试将失败,以便在运行测试时强制断言始终处于打开状态。

向VMWhy Eclipse的运行时添加-ea?使用命令行也是一样的!而且可能是Netbeans的默认设置……我指定Eclipse的原因是,我倾向于看到使用Eclipse的人比其他人更经常遇到这个问题。谢谢大家!让它正常工作!为超快速回复干杯!默认设置很烦人,但有向后兼容性;对于其他方面:您也可以使用java断言指定消息,并且可以保证在不使用它们时从字节码中删除它们。这意味着您不必太担心生产性能。我怀疑这在第三方libraryTrue中是可能的,但在现代VM上,检查这些内容的性能损失是完全不重要的。您可以在语言断言中加入重量级断言,并且知道它们将在生产部署中删除。断言不会从字节码中删除,VM只是在运行时根据标志将它们编译掉。