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

标签 java assert

我很好奇 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/

相关文章:

java - [BEGINNER]在交换机默认设置循环

java - 在 Java 正则表达式中匹配 Unicode 破折号?

java - 抛出多个异常

java - 错误〜parse.com推送通知android?

python - 在 Python 类中存储和断言类型

c++ - 如何在没有 sizeof 的情况下最好地防止自定义断言中出现未使用的变量警告?

java - 出现 "java.net.ProtocolException: Server redirected too many times"错误

java - 为什么 JUnit 不提供 assertNotEquals 方法?

android - Robotium 搜索 setError 的编辑文本

c++ - 什么时候断言变得多余?