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)
这个工作仍然很好,当d是3.03 时将追加,如果d是3.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它有效时......但每次都这不是我想要的。这里有什么问题吗?为什么三元运算符不起作用?
此行为记录在 JLS - 15.25 中。条件运算符 ? : :
\n\n\n\n\n如果其中一个操作数是 T 类型,其中 T 是 byte、short 或 char,而另一个操作数是 int 类型的常量表达式 (\xc2\xa715.28),其值可以用类型 T 表示,则条件表达式为T
\n
当你写的时候
\n\n(a > b) ? \'a\' : 65\nRun Code Online (Sandbox Code Playgroud)\n\n第二种类型转换为 char。
\n\n查看 JLS,它解释了其他情况下的行为(相同的方法)。
\n