Я пытаюсь лучше понять ограничения проверки ключей для Java. Я придумал сценарий, в котором определенный элемент массива вызовет исключение нулевого указателя. Когда я запускаю это через доказательство, оно проходит. Любая идея, почему это? Это должно завершиться ошибкой, так как нулевой указатель будет выброшен на элемент массива 86454. Обратите внимание, что normal_behaviour означает, что он должен завершаться без исключений.
/*@
@ normal_behaviour
@ requires true;
@ ensures \result == 7;
@*/
public static int tmp() {
Object[] arr = new Object[999999];
arr[86454] = new Integer(6);
for (int i=0;i<999999;i++){
if (arr[i]!=null && arr[i].equals(new Integer(6))){
throw new NullPointerException();
}
}
return 7;
}