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

28

我刚从php转到Java

我遇到了以下问题

我想要重写

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

(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";

3
return usrname.equals(username) && (passwd.equals(password) - August
1
尝试这个:String b = (usrname.equals(username) && passwd.equals(password)) ? "会员" : "访客"; - VVB
5个回答

60

您可以做

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

truefalse可以替换为您想要的任何返回值。如果仅限于布尔值,则可以完全避免三元运算符。只需执行:

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

26

假设我需要

  (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是布尔类型,expression-2expression-3具有相同的类型1

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

1 - 这不考虑可以进行的转换。有关完整的信息,请参阅JLS。


话虽如此,编写您的示例的最佳方法根本不使用条件运算符:

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

5
为什么要使用冗余的布尔值?
只需使用:
return  (usrname.equals(username) && passwd.equals(password));

1
顺便说一下,你可以简化如下代码:
return usrname.equals(username) && passwd.equals(password);
三元运算符在PHP和Java中的工作方式相似。我认为你犯了一个愚蠢的错误,也许“username”有一个空格或另一个空白字符。
String a1 = "a";
String b1 = "b";

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

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

它返回 "true"。

1
已经有另外两个人说过了。关于你的更新,不,那不是问题所在。问题在于原帖作者语法写错了。 - Stephen C
1
我发现,在三元运算符内部不能放置return。第一次查看你的代码时,我没有看到这个问题。 - Troncador

0

Java三元运算符是一个表达式,因此会被计算为单个值。 根据Javadocs,对于下面给出的表达式

result = someCondition ? value1 : value2;

如果布尔条件为真,则将value1的值分配给结果,否则将value2的值分配给结果。value1和value2应该是相同的值类型。
因此,返回语句的正确语法应该是:
return boolean_condition ? value_when_true : value_when_false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接