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

Posted

技术标签:

【中文标题】返回值的三元运算符 - Java/Android【英文标题】:Ternary operator to return value- Java/Android 【发布时间】:2014-09-24 05:06:48 【问题描述】:

刚从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)); 

如果返回 boolean 可能是解决方案。

说我需要

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

【问题讨论】:

return usrname.equals(username) &amp;&amp; (passwd.equals(password) ? 试试这个: String b = (usrname.equals(username) && passwd.equals(password) )? “会员”:“客人”; 【参考方案1】:

说我需要

  (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 的类型相同1

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

1 - 这不考虑可能发生的转换。有关完整的故事,请参阅 JLS。


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

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

【讨论】:

【参考方案2】:

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

result = someCondition ? value1 : value2;

如果布尔条件为真,则将 value1 的值赋给结果,否则将 value2 赋给结果。 value1 和 value2 应该是相同的值类型。

因此,return 语句的正确语法应该是

return boolean_condition ? value_when_true : value_when_false

【讨论】:

【参考方案3】:

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

return (usrname.equals(username) && passwd.equals(password))?返回真:返回假;

收件人:

return usrname.equals(用户名) && passwd.equals(密码);

三元运算符在php中的工作方式与Java相似,我认为你犯了一个愚蠢的错误,也许“用户名”有空格或另一个白色字符

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

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

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

它返回“真”

【讨论】:

另外两个人已经说过了。并重新更新您的更新,不,这不是问题。问题是 OP 语法错误。 :o 我想通了,你不能把 return 放在三元运算符里面。我第一次在你的代码中没有看到这一点【参考方案4】:

你可以的

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

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

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

【讨论】:

【参考方案5】:

为什么要冗余boolean

随便用

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

【讨论】:

以上是关于返回值的三元运算符 - Java/Android的主要内容,如果未能解决你的问题,请参考以下文章

为啥在三元运算符中使用“0”会返回第一个值?

Pandas:用于在 DataFrame 中设置值的三元条件运算符

java之三元运算符

Python 函数进阶-lambda匿名函数和三元运算符

java三元表达式怎么算

python函数 | 三元运算