4

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

assert condition : expression

即使“条件”评估为真,“表达式”也会被评估吗?我很好奇这对于我们想要超轻量级“条件”但“表达式”可能太重(例如字符串连接)的情况是否是一个可行的解决方案。像 Guava 中的 Preconditions 这样的解决方案将评估表达式,使其在这种情况下不可行。

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

提前致谢!

4

1 回答 1

5

您可以随时参考 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测试前提条件的语句)之类的东西。它们具有相似但不相同的目的。例如,它们可以在运行时禁用!

于 2013-10-15T00:32:34.147 回答