【问题标题】:Does Android perform boolean short-circuiting?Android是否执行布尔短路?
【发布时间】:2014-03-23 17:52:17
【问题描述】:

我知道Java对布尔表达式中的双&符号进行优化,例如

if(a && b)

如果a 为假,则不计算 b。这适用于 Android 平台吗?

【问题讨论】:

    标签: java android short-circuiting


    【解决方案1】:

    这是 Java 语言规则,由编译器转换为适当的 Java 字节码。 Dalvik 工具集然后将字节码转换为.dex 文件。因此,Java 系统会在 Android 系统处理代码之前适当地应用短路。

    【讨论】:

    • 所有关于如何将代码编译为字节码并转换为 dex 等内容都是实现细节无关。正确答案是这是 Java 语言,Java 的短路语义由 JLS指定。 JLS 不允许此类事情的平台特定行为。
    • @StephenC 这样的开场白,一点也不含糊或不清楚。
    • @chryslis - 我说不相关 ...不是模棱两可或不清楚。如果您意识到除了开放式短语之外的所有内容都无关紧要……您为什么要写它们? :-)
    • @StephenC 因为我发现了解 Android 构建过程的工作原理有助于推理哪些方面相同(语法)以及哪些部分可能以意想不到的方式不同(部分运行时)。跨度>
    • @chryslis - 不幸的是,你的推理有缺陷。它给了你正确的答案,但出于错误的原因。为了说明,如果 Android Java 不受 JLS 约束,那么 Dalvik 工具集可以(理论上/假设地)检测实现短路 && 的 Java 字节码并将它们转换为用于非短路的 Dalvik 字节码电路&。根据您的推理,您怎么知道这不会发生……而且 Android Java 没有什么不同?
    【解决方案2】:

    它别无选择。 Java Language Specification #15.23 要求这样做。

    【讨论】:

      【解决方案3】:

      是的,Android 使用 Java 作为其平台。这是Java中的语言规则,Android中也是如此

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2014-05-31
        • 2011-10-21
        • 2011-05-17
        • 2019-08-27
        • 1970-01-01
        • 2012-03-17
        • 2012-10-25
        • 2015-04-10
        相关资源
        最近更新 更多