-2

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?

hazazs
  • 39
  • 1
  • 8
  • 5
    Cause the first uses expressions and the second uses statements. That's why it's called an operator, it's used in expressions. – kumesana Jan 23 '20 at 09:47

2 Answers2

3

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.

Federico klez Culloca
  • 26,308
  • 17
  • 56
  • 95
1

The ternary operator should always return a value, whereas in case of SysOut the return type is void.