有人可以解释以下代码中的问号吗?此外 INITIAL_PERMANCE 是代码中的静态最终常量,但最后一行语法是什么?
Synapse(AbstractCell inputSource, float permanence) {
_inputSource = inputSource;
_permanence = permanence==0.0 ?
INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);
}
这 ?和 : 是 java 条件运算符的一部分。有时称为三元运算符,因为它是 Java 中唯一接受 3 个参数的运算符。
这本质上是一个内联的 IF / THEN / ELSE 块。
_permanence = permanence==0.0 ?
INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);
可以改写如下:
if (permanence == 0.0)
_permanence = INITIAL_PERMANENCE;
else
_permanence = (float) Math.min(1.0,permanence);
条件运算符的一般形式是
<Test returning a boolean> ? <value for if test is true> : <value for if test is false>
这等于内联方式的 if else 语句。等效于
_permanence =
{// A kind of anonymous routine for assignment
if(permanence==0.0)
{ INITIAL_PERMANENCE }
else
{ (float)Math.min(1.0,permanence)}
}
这是三元运算符。 它的工作方式类似于 if-else 语句。
分解后,语句类似这样:
if(permanence == 0.0) {
_permanence = INITIAL_PERMANENCE;
} else {
_permanence = (float)Math.min(1.0,permanence);
}
在含义非常明确的情况下,它的使用受到限制。三元运算符可能会造成混淆,因此请谨慎使用。
最后的声明:
(float)Math.min(1.0, permanence)
称为类型转换。您正在将Math.min()
返回双精度的 的结果转换为浮点数的结果。您必须阅读更多关于浮点数的内容才能看到这样做的价值。
它被称为 Java 三元运算符(正如 Hovercraft 所说),使用如下:
type variableName = (statement) ? value if statement is true: value if false;
这是最常见的使用方式。
[可选变量] =(布尔测试)?(如果为真则执行):(如果为假则执行)