我正在学习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课程吗?
答案 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)
以获得正确的结果。
修改:如果val
和answer
不是字符串,请忽略有关使用.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)