为什么java中没有默认启用断言?

时间:2015-05-19 11:36:46

标签: java assertions

默认情况下,断言未启用,因此我们必须通过将-ea作为jvm argument传递来启用它,所以,

  1. 为什么默认情况下不启用?
  2. 它的确切用途是什么?
  3. 如果我们启用它会导致性能或任何其他问题吗?

2 个答案:

答案 0 :(得分:3)

对于1,2)每个断言都包含一个布尔表达式,在断言执行时,您认为该表达式为真。如果不是这样,系统将抛出错误。通过验证布尔表达式确实为真,断言确认了您对程序行为的假设,增加了您对程序没有错误的信心。

For 3)正如你告诉编译器断言代码返回一些你预期已经结果的东西。如果代码没有返回你预期的相同输出那么就有可能出现致命错误或意外内存泄漏而不是断言错误。

希望这有帮助!

文档http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

答案 1 :(得分:1)

断言可用于验证(和记录)程序不变量。

它不是为处理异常条件而设计的,所以你不要指望它会对生产环境产生影响。

是否在生产环境中启用断言是有争议的,因此Java可以任意决定默认情况下不会这样做,或者可以这样做以免混淆那些不知道的人。

我不希望断言在生产环境中损害性能(如果你不启用它们),它们可以很容易地被JIT编译器优化掉(或完全被忽略)。