三元运算符返回值 - Java / Android

时间:2014-08-01 04:05:01

标签: java android function operators ternary-operator

刚刚从php切换到Java

我遇到了以下问题

我想重写

if(usrname.equals(username) && (passwd.equals(password))){
    return true;
}
else{
    return false;
}

as

(usrname.equals(username) && passwd.equals(password) )? return true : return false;

它不起作用(语法错误) 然而,

int a=1;
int b=2;
int minVal = a < b ? a : b;

正在运作

为什么三元运算符在根据某些条件返回值时行为不正确

修改

return  (usrname.equals(username) && passwd.equals(password)); 
如果返回布尔值,

可能是解决方案。

我想说我需要

 (usrname.equals(username) && passwd.equals(password) )? return "member": return "guest";

5 个答案:

答案 0 :(得分:35)

你可以做到

return (usrname.equals(username) && passwd.equals(password) )?  true : false;

truefalse可以替换为您想要的任何返回值。如果它只是布尔值,那么你可以完全避免使用三元运算符。只是做

return  (usrname.equals(username) && passwd.equals(password));

答案 1 :(得分:17)

  

我想说我需要

  (usrname.equals(u) && passwd.equals(p)) ? return "member" : return guest";

正确的语法是:

   return (usrname.equals(u) && passwd.equals(p)) ? "member" : "guest";

三元运算符的一般形式是

   expression-1 ? expression-2 : expression-3

其中expression-1的类型为boolean,而expression-2expression-3的类型相同。

在您的代码中,您使用的是需要表达式的return语句。在Java中,return语句不是有效的表达式。


话虽如此,编写你的示例的最佳方法并没有使用条件运算符:

   return usrname.equals(username) && passwd.equals(password);

答案 2 :(得分:3)

为何多余boolean

只需使用

return  (usrname.equals(username) && passwd.equals(password));

答案 3 :(得分:1)

顺便说一下,你可以简化:

返回(usrname.equals(用户名)&amp;&amp; passwd.equals(密码))? return true:return false;

要:

返回usrname.equals(用户名)&amp;&amp; passwd.equals(密码);

三元运算符的工作方式类似于PHP而不是Java,我认为你犯了一个愚蠢的错误,也许&#34;用户名&#34;有一个空格或另一个白色字符

String a1 = "a";
String b1 = "b";

String a2 = "a";
String b2 = "b";

System.out.println((a1.equals(a2)&&b1.equals(b2))?"true":"false");

它返回&#34; true&#34;

答案 4 :(得分:0)

Java三元运算符是一个表达式,因此被评估为单个值。 根据{{​​3}},对于以下给定表达式

result = someCondition ? value1 : value2;

如果布尔条件为true,则将 value1 的值分配给结果,否则将 value2 分配给结果。值1和值2的值类型应相同。

因此return语句的正确语法为

return boolean_condition ? value_when_true : value_when_false