0

只是查看renderscript 的源代码。我想我在第 36 行发现了一个错误

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

认为这需要双 == 但没有足够的编码经验来确定。

4

2 回答 2

7

不,我不认为这一个错误。它设置LOG_ENABLEDLOGDLOGV取决于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);

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

于 2011-02-12T02:40:40.787 回答
1

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

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

i = b ? n1 : n2;

其中 b 可以是计算结果为真或假的表达式。我曾经在第一个元素周围使用括号来说明这一点,尽管我只是查看了我的一些代码,但我现在似乎已经停止这样做了!

于 2011-02-12T12:53:00.740 回答