Boolean isValid = true;
String message = "prefix" + isValid != null ? " midfix " : "suffix";
System.out.println(message);


您认为这是什么结果?我希望prefix midfix。但实际上结果是:midfix

这是Java库本身(1.7)中的错误吗?我应该为此报告一个错误吗?还是按预期工作,而我滥用呢?

可以使用以下方法“修复”:

String message = "prefix" + (isValid != null ? " midfix " : "suffix");
但是无论如何,如果没有刹车,那该不行吗?

最佳答案

评估为:

String message = (("prefix" + isValid) != null) ? " midfix " : "suffix";


等效于:

String message = ("prefixtrue" != null) ? " midfix " : "suffix";


因此,将返回“ midfix”。

如果希望返回“前缀中缀”,请使用括号:

String message = "prefix" + (isValid != null ? " midfix " : "suffix");

08-28 16:00