我有一个JML问题。有什么区别
/*@ invariant array_ != null; */
并将其声明为
protected /*@ non_null */ Object[] array_;
关于array_的元素?在每种情况下,他们拥有什么财产?
提前致谢。
答案 0 :(得分:2)
关于array_的元素?在每种情况下,他们拥有什么财产?
没有任何关于元素的说法。唯一可以保证的是array_
引用不为空。
注意
之间的区别Object[] array = null;
,例如
Object[] array_ = { null };
或
Object[] array_ = { };
第一行会违反不变量,而后两行会被允许,因为array_
会指向一个实际数组(即使这个数组可能只包含空元素,甚至根本没有元素)。 / p>
另一个区别是,在invariant array_ != null;
方法中,array_ != null
必须仅在每个方法之后保留,而如果您使用non_null
编译指示array_ != null
必须保持在每个控件贯穿整个计划。