Java断言-第二个参数评估?

Mar*_*ski 4 java assert

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

assert condition : expression
Run Code Online (Sandbox Code Playgroud)

即使“条件”评估为“真”,“表达”也会得到评估吗?我很好奇,如果我们想要超轻量级的“条件”,但“表达式”可能太繁重(例如字符串串联),这是否是可行的解决方案。诸如番石榴中的前提条件之类的解决方案将评估该表达式,从而使其在这种情况下不可行。

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

提前致谢!

Bru*_*eis 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 Spec可能也有用(您可以在这里找到它:http : //docs.oracle.com/javase/specs/jvms/se7/html/

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