我很好奇 Java 断言的性能。 特别是,对于 2-argument Java 断言,如下所示:
assert condition : expression
即使“条件”的计算结果为真,“表达式”也会被计算吗?我很好奇对于我们想要超轻量级“条件”但“表达式”可能太重(例如字符串连接)的情况,它是否是一个可行的解决方案。解决方案,例如Guava 中的前提条件将计算表达式,使其在这种情况下不可行。
我的测试表明它是惰性求值的,但我找不到任何引用资料来证明这一点。
提前致谢!
最佳答案
您始终可以引用 Java 语言规范 (JLS),http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.10
简而言之,您会发现第二个表达式是惰性求值的。
我强烈建议您为 JLS 添加书签。目录在这里:http://docs.oracle.com/javase/specs/jls/se7/html/index.html . VM 规范也可能有用(您可以在这里找到它:http://docs.oracle.com/javase/specs/jvms/se7/html/)
此外,请注意,断言绝不能替代 Guava 的前提条件(或测试前提条件的 if
语句)之类的东西。它们具有相似但不相同的目的。例如,它们可以在运行时被禁用!
关于Java断言 - 第二个参数评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371398/