返回值的三元运算符 - 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) && (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-2
和expression-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;
true
和 false
可以替换为您想要的任何返回值。如果它只是布尔值,那么您可以完全避免三元运算符。做吧
return (usrname.equals(username) && passwd.equals(password));
【讨论】:
【参考方案5】:为什么要冗余boolean
随便用
return (usrname.equals(username) && passwd.equals(password));
【讨论】:
以上是关于返回值的三元运算符 - Java/Android的主要内容,如果未能解决你的问题,请参考以下文章