Java Sysout中的三元运算符行为

Java Sysout中的三元运算符行为,java,ternary-operator,Java,Ternary Operator,我有以下代码: boolean prime = true; System.out.println("Number is"+ prime ? "prime" : "not prime" ); 上面的代码给出了编译时错误。 当我将其修改为: System.out.println("Number is"+ prime==true ? "prime" : "not prime" ); 它说“不兼容的操作数类型:字符串和布尔值”。 当我将其修改为 System.out.println(prime? "

我有以下代码:

boolean prime = true;
System.out.println("Number is"+ prime ? "prime" : "not prime" );
上面的代码给出了编译时错误。 当我将其修改为:

System.out.println("Number is"+ prime==true ? "prime" : "not prime" );
它说“不兼容的操作数类型:字符串和布尔值”。 当我将其修改为

System.out.println(prime? "prime" : "not prime" );

它工作得很好。
这种行为背后的原因是什么。它在Sysout中将prime视为字符串对象吗?当我在Sysout中使用任何其他字符串时,它都无法正常工作。

请查看运算符优先级:

三元运算符具有最低优先级之一,因此在您的情况下,它的行为如下:

System.out.println(("Number is"+ prime) ? "prime" : "not prime" );
这肯定不是你想要的

System.out.println("Number is"+ (prime ? "prime" : "not prime") );
System.out.println(("Number is"+ prime) ? "prime" : "not prime" );