在内存使用率和性能/开销方面,这两个代码段之间是否有任何区别?

final float xPos = (CAMERA_WIDTH / 2) - (mSprite.getWidth() / 2);
final float yPos = (CAMERA_HEIGHT / 2) - (mSprite.getHeight() / 2);
mSprite.setPosition(xPos, yPos);

另一种情况:
mSprite.setPosition(((CAMERA_WIDTH / 2) - (mSprite.getWidth() / 2)), ((CAMERA_HEIGHT / 2) - (mSprite.getHeight() / 2)));

我可以看到的唯一区别是,第一个代码片段将变量存储在我认为与第二个代码片段不同的内存区域中,但是我对Java内存分配不是很熟悉(我更像是C/C++人)。

我的问题是:一种方式或另一种方式有什么好处?在第一个示例中使用final关键字是否会完全影响它?

谢谢!

最佳答案



在内存方面但是final保证在您处理对象的情况下,整个执行引用不能指向其他对象(如果是原始类型,final保证该变量的值不会在整个执行过程中改变)



根据我的经验,第一种方法当然会产生开销,因为需要创建和维护变量(两种情况下内存使用情况几乎相同)。即使存在一些开销,但对于当前的计算基础架构而言,这将是微不足道的。

但是与第二种方法相比,第一种方法更具可读性和可维护性。让我们将微优化留给JVM

10-08 01:50