只是浏览source for renderscript。 我想我在第36行发现了一个错误
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
认为需要加倍==但没有足够的编码经验才能确定。
答案 0 :(得分:7)
不,我不认为 是一个错误。它将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);
根本没有声明变量名,只是应该分配给某个值的值。
答案 1 :(得分:1)
关于ternary operators如何在Java中工作,这只是一个简单的混淆。你正在做类似的事情:
int i;
boolean b;
int n1=2;
int n2=3;
i = b ? n1 : n2;
其中b可以是评估为true或false的表达式。我曾经在第一个元素周围使用括号来清楚地说明这一点,虽然我只是查看了一些代码,但我现在似乎已停止这样做了!