可能是android renderscript源中的一个小错误

时间:2011-02-12 02:16:50

标签: android renderscript

只是浏览source for renderscript。 我想我在第36行发现了一个错误

private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;

认为需要加倍==但没有足够的编码经验才能确定。

2 个答案:

答案 0 :(得分:7)

不,我不认为 是一个错误。它将LOG_ENABLED设置为LOGDLOGV,具体取决于DEBUG的值。

相关位是:

public class RenderScript {
    static final String LOG_TAG = "libRS_jni";
    private static final boolean DEBUG  = false;
    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;

并且最后一行概念等同于:

    private static final boolean LOG_ENABLED;
    if (DEBUG)
        LOG_ENABLED = Config.LOGD;
    else
        LOG_ENABLED = Config.LOGV;

事实上,

private static final boolean LOG_ENABLED == DEBUG ? Config.LOGD : Config.LOGV;

实际上没有意义,因为它意味着:

private static final boolean ((LOG_ENABLED == DEBUG)
                               ? Config.LOGD
                               : Config.LOGV);

根本没有声明变量名,只是应该分配给某个值的值。

答案 1 :(得分:1)

关于ternary operators如何在Java中工作,这只是一个简单的混淆。你正在做类似的事情:

int i;
boolean b;
int n1=2;
int n2=3;

i = b ? n1 : n2;

其中b可以是评估为true或false的表达式。我曾经在第一个元素周围使用括号来清楚地说明这一点,虽然我只是查看了一些代码,但我现在似乎已停止这样做了!