问题
This is a working code:
String a = "first";
String b = "second";
String object;
System.out.println(object != null ? a : b);
But it isn't:
String a = "first";
String b = "second";
String object;
object != null ? System.out.println(a) : System.out.println(b);
Why?
回答1:
A per the spec
It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.
println
is a method from the PrintStream
class (which System.out
is an instance of) and it has a return type of void
.
Consider that the operator itself is expected to return something for use in cases such as:
bool a = true;
int b = a ? 1 : 2;
If you give a method returning void
(i.e. nothing) as the second and/or third expression, what would the operator itself return?
Finally, Java has no lexical structure that is called a "command". System.out.println
is a method invocation like any other, it just doesn't return anything.
回答2:
The ternary operator should always return a value, whereas in case of SysOut the return type is void.
来源:https://stackoverflow.com/questions/59875556/can-we-use-command-in-ternary-operator-java