我有一个 JML 问题。有什么区别
/*@ invariant array_ != null; */
并将其声明为
protected /*@ non_null */ Object[] array_;
关于array_的元素?在每种情况下,他们拥有什么属性?
提前致谢。
我有一个 JML 问题。有什么区别
/*@ invariant array_ != null; */
并将其声明为
protected /*@ non_null */ Object[] array_;
关于array_的元素?在每种情况下,他们拥有什么属性?
提前致谢。
关于array_的元素?在每种情况下,他们拥有什么属性?
关于元素什么也没说。唯一可以保证的是array_
引用不为空。
注意之间的区别
Object[] array = null;
例如
Object[] array_ = { null };
或者
Object[] array_ = { };
第一行将违反不变量,而后两行将被允许,因为它array_
指向一个实际的数组(即使这个数组可能只包含空元素,甚至根本没有元素)。
另一个区别是,在该invariant array_ != null;
方法中,array_ != null
必须只在每个方法之后保持,而如果使用non_null
pragma ,则array_ != null
必须在整个程序的每个控制点保持。