可以使用?:
(三元)运算符代替 if-then-else 语句进行赋值,但也可以某种方式用于流量控制?例如,
flag ? method1 : method2;
答案 0 :(得分:5)
是,但:
您必须保存结果;你不能单独拥有一个表达式(在Java中;你可以用其他语言)。
这些方法不能有void
返回类型。
条件表达式的类型取决于您使用的方法的返回类型。如果两者都返回布尔值,则类型为boolean;如果两者都是数字,则结果为数字;否则,结果将是参考类型(例如,像Object
)。
E.g:
x = flag ? method1() : method2();
更多JLS §15.25 - Conditional Operator ?
:
。
如果能够以这种方式使用条件对您很重要(个人而言,我坚持使用流控制语句),您可以定义一个如下所示的实用方法:
static void consume(Object o) {
}
然后:
consume(flag ? method1() : method2());
答案 1 :(得分:0)
可能已经回答了。但是,如果两个方法都返回相同的类型,我们可以在三元操作中使用这些方法。示例如下。
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;
}
答案 2 :(得分:0)
您可以使用它,但它应该相同(可能在转换后)返回类型,请参阅JLS 15.25. Conditional Operator ? :了解更多详情:
此转换可能包括装箱或拆箱转换(§5.1.7,§5.1.8)