我有以下代码delay = (delay>200) ? delay : 200;
Java
为此发出警告消息Can be replaced with 'Math.max' call
。
在这里,我看到Math.max(a, b)
实际上与(a > b) ? a : b
相同,因此三元运算符并不比Math.max
差
那么,如果用Math.max
方法调用替换三元运算符没有优势,为什么Java
会发出此警告消息?
我怀疑这是一个真正的编译器警告,可能是一些IDE检查/警告。
尽管如此,你是对的,没有硬性的技术理由使我们更喜欢其中一个。
但是:从人类读者的角度来看,使用Math.max()
有一个主要的优点:更容易阅读和理解。那么简单。另外:除非万不得已,否则不要重复代码。
永远记住:你写代码是为了你的人读者。编译器接受任何语法正确的东西。但是对于你的人类读者来说,条件和赋值与"取两个数的最大值"之间是有区别的。
Math.max(a, b)
比临时语句更具可读性,因为:
200
不需要重复。
>
无需编写和理解一般来说,三元格式更强大,因为它允许您执行以下操作:
delay = (delay>200) ? 200 : delay;
delay = (delay<200) ? delay : 200;
delay = (delay>200) ? delay: 300;
你的代码的读者需要理解你实际上在做哪些事情。解析它并理解它是一个简单的max()
需要时间。
max
更清楚地表明你的意图。
除了现有的答案之外,如果下限(在您的示例中是200)不是一个常数,而是一个派生值,则可以获得性能优势:
delay = (delay > readLimitFromFile()) ? delay : readLimitFromFile();
当一个操作足够时,这可能会导致执行2个昂贵的磁盘读取操作。使用Math.max:
delay = Math.max(delay, readLimitFromFile());
将只使用一个磁盘读操作。