【发布时间】:2014-09-09 22:00:24
【问题描述】:
正在修复我们代码中的错误,并发现了这个行为不端的奇怪函数:
private String calculate(String a, String b) {
return a == null ? "" : a + a != null && b != null ? "\n" : "" + b == null ? "" : b;
}
匆忙中,我只是添加了一些括号让它像这样工作:
private String calculatePar(String a, String b) {
return a == null ? "" : a + (a != null && b != null ? "\n" : "") + (b == null ? "" : b);
}
顺便说一句,这不是最优雅的做法,但实际上两者都来自我为解决问题而编写的(简化的)测试用例示例。
现在我对有问题的第一个功能进行了一些测试,这就是我的想法:
- 如果a==null,它将返回“”(空字符串)
- 如果 a!=null 和 b == null 它将返回 null
- 否则(如果 a 和 b 不为空),它将返回“\n”
现在有个大问题:这是怎么发生的?我的意思是编译器很可能没有按照原始开发人员的意图放置自己的括号,但是你怎么能得到 null 呢?
【问题讨论】:
-
我看到问题已迁移,您得到了答案;优秀!以后请记住,这是提出此类问题的最佳场所,而不是Code Review
标签: java string conditional-statements ternary-operator