【发布时间】:2014-03-01 05:08:24
【问题描述】:
使用强制类型转换或隐式类型类型进行 int 除法在性能上是否存在差异
例如。
int a = 7;
int b = 3;
float x = ((float)a)/b;
or
float y = (a+0f)/b;
【问题讨论】:
使用强制类型转换或隐式类型类型进行 int 除法在性能上是否存在差异
例如。
int a = 7;
int b = 3;
float x = ((float)a)/b;
or
float y = (a+0f)/b;
【问题讨论】:
正如 cmets 所指出的,由于运算符优先规则,这两个版本是不同的。
float y = a + 0f / b;
实际上等价于
float y = a + (0f / b);
即
float y = a;
你应该写的
float y = (a + 0f) / b;
只要你得到正确的运算符优先级,在语义上或性能方面没有区别。 (JIT 编译器极有可能优化掉人为添加的零。)
但是,有一个重要的区别。您的第二种形式是不寻常习语,不寻常的习语会使其他人更难阅读您的代码。最好以“正常”方式编写代码……如果您(或您的老板!!)预计其他人可能需要阅读/维护它。
(如果您养成错误操作运算符优先级的习惯,他们可能需要比您预期的更快地阅读您的代码...... :-))
【讨论】: