在Java中使用三元运算符进行流量控制
在Java中使用三元运算符进行流量控制,java,ternary-operator,Java,Ternary Operator,?:(三元)运算符可以代替if-then-else语句用于赋值,但也可以以某种方式用于流控制?比如说, flag ? method1 : method2; 是的,但是: 你必须保存结果;您不能只拥有一个表达式(在Java中;您可以使用其他一些语言) 这些方法不能有void返回类型 条件表达式的类型取决于所使用方法的返回类型。如果两者都返回布尔值,则类型为布尔值;如果两者都是数字,则结果将是数字;否则,结果将是引用类型(例如,像对象) 例如: 更多 如果能够以这种方式使用条件语句对您很重要(我个
?:
(三元)运算符可以代替if-then-else语句用于赋值,但也可以以某种方式用于流控制?比如说,
flag ? method1 : method2;
是的,但是:
void
返回类型对象
)
例如:
更多
如果能够以这种方式使用条件语句对您很重要(我个人坚持使用流控制语句),那么您可以定义一个如下所示的实用方法:
static void consume(Object o) {
}
然后:
consume(flag ? method1() : method2());
可能已经回答了。但是,如果两种方法返回相同的类型,我们可以在三值运算中使用这些方法。下面给出的例子
public static void main(String[] args) {
boolean b = true;
int i = b ? getThis() : getThat();
}
public static int getThis() {
return 1;
}
public static int getThat() {
return 2;
}
您可以使用它,但它应该是相同的(可能在转换后)返回类型有关详细信息,请参阅: 该转换可能包括装箱或拆箱转换(§5.1.7、§5.1.8)
你试过了吗?发生什么事了?是的。肯定用这种方式调用方法是否有特殊问题?是的,可以。你能补充一些具体的例子吗?:)只是学究气:
?:
是三元运算符(接受三个操作数的运算符)。它的专有名称是条件运算符。它恰好是Java目前唯一的三元运算符,但是…并非所有的非void类型都兼容(将Object
用作常见的“supertype”)。如果您的两个方法确实不需要返回任何内容,您可以声明它们返回void
对象,我希望人们会意识到这意味着该方法不会返回任何有用的东西——然后你只需扑通一声返回null代码>在每个代码的末尾。但是,我不希望在这种情况下首先使用三元。
public static void main(String[] args) {
boolean b = true;
int i = b ? getThis() : getThat();
}
public static int getThis() {
return 1;
}
public static int getThat() {
return 2;
}