我对 Java 断言的性能很好奇。
特别是,使用 2 个参数的 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 Spec 也可能有用(您可以在这里找到它: http://docs.oracle.com/javase/specs/jvms/se7/html/ )
另外,请注意,断言绝不能替代 Guava 的前提条件(或测试前提条件的 if
语句)之类的东西。它们具有相似但不完全相同的目的。例如,它们可以在运行时被禁用!
关于Java 断言 - 第二个参数评估?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19371398/