JML不是null变种?

时间:2010-12-05 15:11:00

标签: java arrays null invariants jml

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

/*@ invariant array_ != null; */

并将其声明为

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

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

没有任何关于元素的说法。唯一可以保证的是array_引用不为空。

注意

之间的区别
Object[] array = null;

,例如

Object[] array_ = { null };

Object[] array_ = { };

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


另一个区别是,在invariant array_ != null;方法中,array_ != null必须仅在每个方法之后保留,而如果您使用non_null编译指示array_ != null必须保持在每个控件贯穿整个计划。