Java三元运算符不起作用?

Sim*_*mon 3 java stringbuilder ternary-operator

假设我们有一个 StringBuilder 和一个 double。现在想追加双精度。如果双精度数可以表示为整数(例如 3.0、5.0 等),我想将其添加为整数,否则添加为双精度数。

实现这一点的第一个方法是:

StringBuilder sb = new StringBuilder();
double d = 3.5;

if (d % 1 == 0) sb.append((int) d);
else sb.append(d);

System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)

这个工作仍然很好,当d3.03 时将追加,如果d3.53.5 将追加。

现在我想用三元运算符快速完成此操作:

StringBuilder sb = new StringBuilder();
double d = 3.5;

sb.append(d % 1 == 0 ? (int) d : d);

System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)

所以现在我有一个问题,每次,如果是双倍,3.0或者3.5它将被添加为双倍值!仅当我理论上强制执行trueAND时false它有效时......但每次都这不是我想要的。这里有什么问题吗?为什么三元运算符不起作用?

Din*_*inh 5

此行为记录在 JLS - 15.25 中。条件运算符 ? : :

\n\n
\n

如果其中一个操作数是 T 类型,其中 T 是 byte、short 或 char,而另一个操作数是 int 类型的常量表达式 (\xc2\xa715.28),其值可以用类型 T 表示,则条件表达式为T

\n
\n\n

当你写的时候

\n\n
(a > b) ? \'a\' : 65\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二种类型转换为 char。

\n\n

查看 JLS,它解释了其他情况下的行为(相同的方法)。

\n