Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java断言-第二个参数求值?_Java_Assert - Fatal编程技术网

Java断言-第二个参数求值?

Java断言-第二个参数求值?,java,assert,Java,Assert,我对Java断言的性能很好奇。 特别是,对于2参数Java断言,如下所示: assert condition : expression 即使“条件”的计算结果为true,“表达式”也会被计算吗?我很好奇,当我们想要超轻量的“条件”,但“表达式”可能太重(例如字符串连接)时,这是否是一个可行的解决方案。如番石榴中的先决条件等解决方案将评估表达式,使其在此类情况下不可行 我的测试表明它是惰性评估的,但我找不到任何证明它的参考资料 提前谢谢 您可以随时参考Java语言规范(JLS) 简言之,您将发现

我对Java断言的性能很好奇。 特别是,对于2参数Java断言,如下所示:

assert condition : expression
即使“条件”的计算结果为true,“表达式”也会被计算吗?我很好奇,当我们想要超轻量的“条件”,但“表达式”可能太重(例如字符串连接)时,这是否是一个可行的解决方案。如番石榴中的先决条件等解决方案将评估表达式,使其在此类情况下不可行

我的测试表明它是惰性评估的,但我找不到任何证明它的参考资料


提前谢谢

您可以随时参考Java语言规范(JLS)

简言之,您将发现第二个表达式是惰性计算的

我强烈建议您将JLS添加到书签中。目录如下:。VM规范可能也很有用(您可以在这里找到它:)


另外,请注意,断言绝不能替代Guava的前提条件(或
if
测试前提条件的语句)。它们有着相似但不完全相同的目的。例如,可以在运行时禁用它们

你可以通过调用一个非void方法来测试它,该方法在调用时打印出一条消息。是的,我测试了它,但我想要一个正式的证明——一个实现做了一些事情,但并不知道它是有保证的。布鲁诺的回答指向“官方”保证:)完美,这很有帮助。谢谢是的,它只用于“开发”断言,而不是用户错误等。Java断言确实可以在运行时禁用。事实上这是默认的行为。为了进行评估,必须使用-ea开关专门启用Java断言。