java三元操作符可以替换为Math.马克斯的电话



我有以下代码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());

将只使用一个磁盘读操作。

相关内容

  • 没有找到相关文章

最新更新