【问题标题】:Java ternary operator is automatically wide casting an int to double during string concatenation [duplicate]Java三元运算符在字符串连接期间自动将int转换为double [重复]
【发布时间】:2020-05-29 11:10:36
【问题描述】:

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

数据/文本/1.2/

当值为 1.0 时文件夹为

数据/文本/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);

输出如下:

数据/文本/1.0/

数据/文本/1/

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

数据/文本/1/

我期望这个值,因为我使用的是整数文字。

这是某种错误,在三元运算符的情况下,int 值被强制转换为双精度值?还是我搞错了?

【问题讨论】:

  • Java 中的每个表达式都有一个编译时类型,包括三元表达式。 “intdouble”不是可能的类型,因此为了让这个三元表达式具有类型,必须将一个或两个操作数转换为不同的类型。
  • 如果你把它改成(key == 1.0 ? "1" : key)你告诉编译器结果应该是一个字符串。

标签: java string int double conditional-operator


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2014-11-17
    • 2015-06-09
    • 2016-07-07
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多