只是查看renderscript 的源代码。我想我在第 36 行发现了一个错误
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
认为这需要双 == 但没有足够的编码经验来确定。
只是查看renderscript 的源代码。我想我在第 36 行发现了一个错误
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
认为这需要双 == 但没有足够的编码经验来确定。
不,我不认为这是一个错误。它设置LOG_ENABLED
为LOGD
或LOGV
取决于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);
它根本没有声明变量名,只是一个应该分配给某物的值。
关于三元运算符如何在 Java 中工作,这只是一个简单的混淆。你正在做类似的事情:
int i;
boolean b;
int n1=2;
int n2=3;
i = b ? n1 : n2;
其中 b 可以是计算结果为真或假的表达式。我曾经在第一个元素周围使用括号来说明这一点,尽管我只是查看了我的一些代码,但我现在似乎已经停止这样做了!