以下是2个代码段 - >
1
Position bulletPosition = new Position(turretPosition);
float offsetX = turretSprite.getHeight() + (38 * MathUtils.cos(MathUtils.degreesToRadians * turretPosition.getAngle()) - 41);
float offsetY = turretSprite.getWidth()/2 + (38 * MathUtils.sin(MathUtils.degreesToRadians * turretPosition.getAngle()));
bulletPosition.addX(offsetX).addY(offsetY);
2
Position bulletPosition = new Position(turretPosition);
bulletPosition
.addX(turretSprite.getHeight() + (38 * MathUtils.cos(MathUtils.degreesToRadians * turretPosition.getAngle()) - 41))
.addY(turretSprite.getWidth()/2 + (38 * MathUtils.sin(MathUtils.degreesToRadians * turretPosition.getAngle())));
在代码段1中,我创建了2个浮点变量,然后将它们作为参数传递给addX和addY函数。
在代码段2中,我没有创建浮点数,而是将评估作为参数传递。
现在让我们说这个片段是一个函数的一部分,每当用户按下某个键时(即非常快),就会调用该函数。
现在我的问题是 Snippet 1 是否意味着我们会一次又一次地创建新的花车,并且它不会在 Snippet 2 中发生?或者两种情况都是一样的。
我喜欢片段,因为它更干净但我想知道这两段代码之间是否有区别?我总是想到这一点,并想到今天问它。
答案 0 :(得分:2)
理论上,Snippet 1中的2个局部变量对应于在堆栈上分配更多空间,以及对于addX
和addY
函数调用的那些堆栈位置的额外读取访问。给定优化编译器,两个片段的执行时间可能相同。
如果offsetX
和offsetY
的值被多次使用,理论上你将领先Snippet 1,但同样,优化编译器应该缓存它们。
可以说,主要区别在于性能 - 它的可读性和可维护性。