Java断言令人讨厌的副作用 – 编译器错误?

这个

public class test 
{
    public static void main(String[] args) 
    {
        Object o = null;
        assert o != null;
        if(o != null)
          System.out.println("o != null");
    }
}

打印出“o!= null”; 1.5_22和1​​.6_18.编译错误?评论断言修复了它.当断言被禁用时,字节代码似乎直接跳转到print语句:

 public static main(String[]) : void
   L0
    LINENUMBER 5 L0
    ACONST_NULL
    ASTORE 1
   L1
    LINENUMBER 6 L1
    GETSTATIC test.$assertionsDisabled : boolean
    IFNE L2
    ALOAD 1: o
    IFNONNULL L2
    NEW AssertionError
    DUP
    INVOKESPECIAL AssertionError.<init>() : void
    ATHROW
   L2
    LINENUMBER 8 L2
    GETSTATIC System.out : PrintStream
    LDC "o != null"
    INVOKEVIRTUAL PrintStream.println(String) : void
   L3
    LINENUMBER 9 L3
    RETURN
   L4

最佳答案 我不知道“讨厌”.你能给出一些代码的真实例子吗?你的例子看起来非常人为.

编辑 – 出于好奇,我输入程序,编译并使用java 1.6.0_16运行它.我没有明显的编译器错误:

>启用断言(java -ea test)后,我收到断言错误.
>断言断言(java测试)我没有输出.

点赞