为什么在 java 中默认不启用断言?
Why assertion is not enabled by default in java?
默认断言未启用,因此我们必须通过将 -ea
作为 jvm argument
传递来启用它,因此,
- 为什么默认不启用?
- 它的具体用途是什么?
- 如果我们启用它会导致性能或任何其他问题吗?
对于 1,2) 每个断言都包含一个布尔表达式,您认为该表达式在断言执行时为真。如果不正确,系统将抛出错误。通过验证布尔表达式确实为真,断言证实了您对程序行为的假设,增加了您对程序没有错误的信心。
对于 3) 当您告诉编译器断言代码 return 是您已经期望的东西时 outcome.If 代码不会 return 与您相同的输出expected 那么除了断言错误之外,还有可能出现致命错误或意外内存泄漏。
希望对您有所帮助!
文档http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html
断言可用于验证(和记录)程序不变性。
它不是为处理异常情况而设计的,因此您无论如何都不要指望它会对生产环境产生影响。
是否在生产环境中启用断言是值得商榷的,因此Java可能会任意决定默认情况下不会启用断言,或者可能会这样做以免混淆那些不知道的人。
我不认为断言会在生产环境中损害性能(前提是您不启用它们),它们可以很容易地被 JIT 编译器优化掉(或完全忽略)。
默认断言未启用,因此我们必须通过将 -ea
作为 jvm argument
传递来启用它,因此,
- 为什么默认不启用?
- 它的具体用途是什么?
- 如果我们启用它会导致性能或任何其他问题吗?
对于 1,2) 每个断言都包含一个布尔表达式,您认为该表达式在断言执行时为真。如果不正确,系统将抛出错误。通过验证布尔表达式确实为真,断言证实了您对程序行为的假设,增加了您对程序没有错误的信心。
对于 3) 当您告诉编译器断言代码 return 是您已经期望的东西时 outcome.If 代码不会 return 与您相同的输出expected 那么除了断言错误之外,还有可能出现致命错误或意外内存泄漏。
希望对您有所帮助!
文档http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html
断言可用于验证(和记录)程序不变性。
它不是为处理异常情况而设计的,因此您无论如何都不要指望它会对生产环境产生影响。
是否在生产环境中启用断言是值得商榷的,因此Java可能会任意决定默认情况下不会启用断言,或者可能会这样做以免混淆那些不知道的人。
我不认为断言会在生产环境中损害性能(前提是您不启用它们),它们可以很容易地被 JIT 编译器优化掉(或完全忽略)。