为什么在 java 中默认不启用断言?

Why assertion is not enabled by default in java?

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

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

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

对于 3) 当您告诉编译器断言代码 return 是您已经期望的东西时 outcome.If 代码不会 return 与您相同的输出expected 那么除了断言错误之外,还有可能出现致命错误或意外内存泄漏。

希望对您有所帮助!

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

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

它不是为处理异常情况而设计的,因此您无论如何都不要指望它会对生产环境产生影响。

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

我不认为断言会在生产环境中损害性能(前提是您不启用它们),它们可以很容易地被 JIT 编译器优化掉(或完全忽略)。