首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

三元运算有关问题

2013-12-19 
三元运算问题String[] strs new String[]{, null, 1, a, 1, a, 1, a}String strfor (in

三元运算问题

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] + "
[解决办法]
");

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

热点排行