日期:2014-05-20  浏览次数:20707 次

三元运算问题
String[] strs = new String[]{"", null, "1", "a", "1   ", "a  ", "   1", "    a"};

String str;

for (int i = 0; i < strs.length; i++) {
str = "92=" + strs[i] == null ? "" : strs[i] + "|";
System.out.println(i + "\t[" + str + "]");
}


执行后,前面的“92=”怎么没有了?

------解决方案--------------------
str = "92=" + strs[i] == null ? "" : strs[i] + "
------解决方案--------------------
";
改成
str = "92=" + (strs[i] == null ? "" : strs[i]) + "
------解决方案--------------------
";

------解决方案--------------------
因为三元运算符 ? :的优先级比二元+运算符低,先运行相加运算,因此实际上上面的式子等于:
str = (("92=" + strs[i]) == null) ? "" : strs[i] + "
------解决方案--------------------
";
先运算了相加+,再判断相加后的字符串是否等于null。

楼主莫非想表达:
str = "92=" + ((strs[i] == null) ? "" : strs[i] + "
------解决方案--------------------
");

这样括起来就先运行三元运算符。