为什么java中默认情况下不启用断言?

为什么java中默认情况下不启用断言?,java,assertions,Java,Assertions,默认情况下,断言未启用,因此我们必须通过将-ea作为jvm参数so传递来启用它 为什么默认情况下不启用它 它的确切用途是什么 如果启用,是否会导致性能或任何其他问题 对于1,2),每个断言都包含一个布尔表达式,您认为该表达式在断言执行时为真。如果不正确,系统将抛出错误。通过验证布尔表达式是否为真,断言确认了您对程序行为的假设,增加了您对程序没有错误的信心 对于3)当您告诉编译器断言的代码返回您预期的结果时。如果代码返回的输出与您预期的不同,则有可能出现致命错误或除断言错误以外的意外内存泄漏 希望

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

  • 为什么默认情况下不启用它
  • 它的确切用途是什么
  • 如果启用,是否会导致性能或任何其他问题
  • 对于1,2),每个断言都包含一个布尔表达式,您认为该表达式在断言执行时为真。如果不正确,系统将抛出错误。通过验证布尔表达式是否为真,断言确认了您对程序行为的假设,增加了您对程序没有错误的信心

    对于3)当您告诉编译器断言的代码返回您预期的结果时。如果代码返回的输出与您预期的不同,则有可能出现致命错误或除断言错误以外的意外内存泄漏

    希望这有帮助


    文档

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

    它不是为处理异常情况而设计的,所以无论如何,您都不希望它对生产环境产生影响

    是否在生产环境中启用断言是有争议的,所以Java可能会任意决定默认情况下不会这样做,或者这样做是为了不混淆不知情者


    我认为断言在生产环境中根本不会损害性能(只要您不启用它们),JIT编译器可以轻松地优化它们(或完全忽略它们)。

    1。[为什么默认情况下不启用断言][1]2&3。[断言的使用和它们是否引发错误][2][1]:[2]:1-2)断言仅用于测试工具,它不应该是标准代码逻辑的一部分,因此客户端的JVM不必运行它,这就是默认情况下禁用它的原因。3) 依赖于通常会被跳过的断言代码。@GauravMahawar使用
    [description](link)
    在注释中发布链接。3)由于默认情况下未启用断言,因此表达式(函数或简单表达式)没有副作用是很重要的。例如,表达式不应更改变量的值,因为当断言打开时,程序的行为将改变。一个重要的用例是在开发或QA环境中测试前置/后置条件(使用-ea),并且能够在不需要修改代码的情况下从生产中删除这些测试。有些人会说,您可以在方面实现类似的功能,但我发现使用assert更容易。