ЭтоJava утверждает неприятный побочный эффект - ошибка компилятора?
public class test
{
public static void main(String[] args)
{
Object o = null;
assert o != null;
if(o != null)
System.out.println("o != null");
}
}
печатает "о = нуль!"; как 1.5_22, так и 1.6_18. Ошибка компилятора? Комментируя утверждение, он исправляет это. Байт-код появляется, чтобы перейти непосредственно к утверждению печати, когда утверждения отключены:
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
ничего не печатает здесь, 1.6.0_12 – Bozho
Какой версии JAVAC компилятора вы использовали для компиляции? Это должна быть ошибка компилятора, компиляция с 1.6.0_18 (оконным 32-битным) кодом работает как ожидалось (не печатает o! = Null). –
Не воспроизводимый. Вы уверены, что это именно ваш тестовый код? Какой компилятор и какой jvm вы используете? Какие флаги? – Avi