Java 基元类型之间的强制转换是否会导致堆分配?
下面的Java示例会在任何JVM p.position.x和p.position.y中创建堆分配吗Java 基元类型之间的强制转换是否会导致堆分配?,java,jvm,Java,Jvm,下面的Java示例会在任何JVM p.position.x和p.position.y中创建堆分配吗 p.position.x = (float)(Math.cos(radians) * 30) + x; p.position.y = (float)(Math.sin(radians) * 30) + y; 同样,下面的隐式示例: float tempX = 0; float tempY = 0; tempX += (Math.cos(p.currentOrbitDegrees) * 30)
p.position.x = (float)(Math.cos(radians) * 30) + x;
p.position.y = (float)(Math.sin(radians) * 30) + y;
同样,下面的隐式示例:
float tempX = 0;
float tempY = 0;
tempX += (Math.cos(p.currentOrbitDegrees) * 30) + x;
p.position.x = tempX;
tempY += (Math.sin(p.currentOrbitDegrees) * 30) + y;
p.position.y = tempY;
另外,在所有JVM中,一种方法可能比另一种方法更快吗?问题中的任何代码都不会导致堆分配 通常,转换可能导致堆分配的唯一情况1是装箱,以及当其中一个操作数不是字符串时使用字符串串联运算符+进行的转换 另外,在所有JVM中,一种方法可能比另一种更快吗 不,不太可能。跨所有JVM 某些平台上的JIT可能会优化冗余初始化,而不是其他平台上的。因此,这两个代码段的相对性能将取决于平台 事实上,对于足够老的JVM来说,这种差异可能是显著的;i、 当JIT编译器成为新技术时。。。或者之前 然而: 如果我们考虑java的未来版本,它还没有被发布/预先发布,那么整个问题是客观的无法回答的。 你不应该依赖其他人的直觉。要科学。对应用程序进行基准测试并在多个平台上运行。然后使用分析器来决定是否值得优化这部分代码 但是对于您提供的示例,第一个版本显然是编写代码的简单方法,因此应该是首选
1-从技术上讲,这些转换不是由类型强制转换本身完成的,但它们可能发生在类型强制转换指定的加宽或缩小转换之前或之后。堆分配编号。一种方法可能比另一种方法更快。如果有,不管怎样,编译器都会对其进行优化。有消息告诉我堆分配错误来自您的系统中的其他地方code@Michael你应该把它作为这个问题的答案。@rabbitguy-OP从来没有说过有错误