我对 Java 断言的性能很好奇。特别是,使用 2 参数 Java 断言,如下所示:
assert condition : expression
即使“条件”评估为真,“表达式”也会被评估吗?我很好奇这对于我们想要超轻量级“条件”但“表达式”可能太重(例如字符串连接)的情况是否是一个可行的解决方案。像 Guava 中的 Preconditions 这样的解决方案将评估表达式,使其在这种情况下不可行。
我的测试表明它是懒惰的评估,但我找不到任何证明它的参考。
提前致谢!
您可以随时参考 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
测试前提条件的语句)之类的东西。它们具有相似但不相同的目的。例如,它们可以在运行时禁用!