Java语法问题

时间:2014-03-27 15:33:46

标签: java android

我正在学习Android并参加马里兰大学提供的MOOC。

在其中一个讲座中,我注意到以下代码行:

      String output = (val == answer) ? "42" : "We may never know";

我猜这是相当于:

      if(val == answer){
          String output = "42";
      }else{
          String output = "We may never know";
      }

我的假设是否正确?

PS:除了课程以外我还可以在网上获取认证的Android课程吗?

4 个答案:

答案 0 :(得分:2)

你几乎是对的,实际上是这样的:

  String output;
  if(val == answer){
      output = "42";
  }else{
      output = "We may never know";
  }

BR Erik

答案 1 :(得分:2)

您的假设几乎正确。三元表达式将更准确地表示为:

String output;
if (val == answer) {
    output = "42";
}
else {
    output = "We may never know";
}

在原始版本中,output仅在if / else块的范围内可用,因为您在其中声明了它。将其声明在范围之外意味着您以后可以使用该值。但是,正如Hariharan指出的那样,使用==进行字符串比较是Java中的禁忌;你比较原始对象,而不是字符串内容。您希望将val == answer替换为val.equals(answer)以获得正确的结果。

修改:如果valanswer不是字符串,请忽略有关使用.equals()的部分。我(显然是其他所有回答这个问题的人)做出了错误的假设,因为其他一切都是字符串。 .equals()应该用于字符串和任何其他复杂对象,==可以安全地用于基元。

答案 2 :(得分:0)

是的,你是对的(差不多)。它被称为ternary operator。你的逻辑很好,但你必须注意变量是在if-else语句之外初始化的。

String output;
if (val == answer) {
    output = "42";
} else {
    output = "We may never know";
}

如果变量将在if和else块中定义,则在}符号之后将无法使用它,因为它将超出范围。

答案 3 :(得分:0)

是的,你完全正确。它是所谓的ternary运营商。看一看herehere

还有一个小注意事项:在条件块内两次声明相同的变量是很奇怪的。在外面宣布它。