Java 三元运算符在字符串连接期间自动将 int 宽转换为 double

Java ternary operator is automatically wide casting an int to double during string concatenation

我正在尝试使用数组中的一些数值创建一组文件路径并读取这些文件。除了值为 1.0 时,文件夹的名称中都包含准确的数值。因此,如果值为 1.2,则文件夹就像

data/text/1.2/

当值为 1.0 时文件夹为

data/text/1/

所以我尝试使用三元运算符并得到了意想不到的结果。这是代码-

double key = 1.0;
String path = "data/text/" + (key == 1.0 ? 1 : key) + "/";
System.out.println(path);
        
String path2 = "data/text/" + 1 + "/";
System.out.println(path2);

输出结果如下:

data/text/1.0/

data/text/1/

第一种情况的值不应该也是吗?

data/text/1/

因为我使用的是整数文字,所以我期望该值。

这是不是某种类型的错误,在三元运算符的情况下,int 值被强制转换为 double?还是我弄错了什么?

您需要为三元运算选择一个明确的 return 类型。它必须是第二个和第三个操作数可以转换成的东西,并且适合三元结果的使用方式。

作为一个简单的策略,看看您打算如何使用结果,然后选择适合该用途的类型。将一个或两个操作数强制为该类型。

在问题的情况下,结果将与字符串连接。使用 "1" 而不是 1 强制三元结果类型为 String。 key可以转换成String,所以只需要改变一个操作数。