2

我有一个 JML 问题。有什么区别

/*@ invariant array_ != null; */

并将其声明为

protected /*@ non_null */ Object[] array_;

关于array_的元素?在每种情况下,他们拥有什么属性?

提前致谢。

4

1 回答 1

2

关于array_的元素?在每种情况下,他们拥有什么属性?

关于元素什么也没说。唯一可以保证的是array_引用不为空。

注意之间的区别

Object[] array = null;

例如

Object[] array_ = { null };

或者

Object[] array_ = { };

第一行将违反不变量,而后两行将被允许,因为它array_指向一个实际的数组(即使这个数组可能只包含空元素,甚至根本没有元素)。


另一个区别是,在该invariant array_ != null;方法中,array_ != null必须只在每个方法之后保持,而如果使用non_nullpragma ,则array_ != null必须在整个程序的每个控制点保持。

于 2010-12-05T15:12:47.770 回答