java代码中的问号

时间:2012-09-15 02:22:34

标签: java operators

有人可以在下面的代码中解释问号吗?此外,INITIAL_PERMANCE是代码中的静态最终常量,但synatax的最后一行是什么?

Synapse(AbstractCell inputSource, float permanence) {
    _inputSource = inputSource;
    _permanence = permanence==0.0 ? 
        INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);
}

5 个答案:

答案 0 :(得分:9)

?和:是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>

答案 1 :(得分:0)

这等于内联方式的if else语句。等效于

   _permanence = 
    {// A kind of anonymous routine for assignment
      if(permanence==0.0)
      { INITIAL_PERMANENCE } 
      else
      { (float)Math.min(1.0,permanence)}
    }

关于ternary operators

的oracle网站上有一个很好的解释

答案 2 :(得分:0)

这是ternary operator.它就像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()的结果转换为浮点数的结果。你必须阅读更多关于floating point numbers are的内容,以了解这样做的价值。

答案 3 :(得分:0)

它被称为Java三元运算符(如Hovercraft所说),并且使用如下:

type variableName = (statement) ? value if statement is true: value if false;

答案 4 :(得分:0)

这是最常用的方式 [可选变量] =(布尔测试)? (如果为True则执行此操作):(如果为false,则执行此操作)