三元运算符的奇怪行为

Weird behavior of ternary operator

我遇到了奇怪的情况,调试后无法解释。我想使用该模式设置标签文本:

兴趣点:"replacement"

替换取决于三元运算,如下所示:

label.setText("POI: " + requestItem.getPoi() != null ? requestItem.getPoi() : "#####")

requestItem.getPoi() returns 类型的字符串,我想检查它是 returns 字符串还是 null。如果为空,我想设置 '#####'。

问题出在 requestItem.getPoi() != null ? requestItem.getPoi() : "#####"

当 requestItem.getPoi() returns 空调试器抛出 "Type mismatch: Cannot convert from String to void".

时,我在调试器中评估此值

有人知道这个操作有什么问题吗?

问题是由运算符优先级引起的,必须用括号将三元表达式括起来。试试这个:

"POI: " + (requestItem.getPoi() != null ? requestItem.getPoi() : "#####")