我很想更好地理解 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;
}