在Java中转换基元类型的成本

在Java中转换基元类型的成本,java,casting,primitive-types,Java,Casting,Primitive Types,我有一个用Java编写的算法,它迭代地执行基本体转换,如: int val = (int) Math.max(val1, val2); 由于我正在尝试改进算法的性能,我想知道是否必须避免重复上述转换,例如,使用以下方法: int val = ((val1>val2) ? val1 : val2); PS:我搜索了Stackoverflow,但没有找到类似的答案。为了便于讨论,我们假设val1和val2都是 double,您仍然希望得到一个int(因为您说这只是一个示例) 我建议首先比较

我有一个用Java编写的算法,它迭代地执行基本体转换,如:

int val = (int) Math.max(val1, val2);
由于我正在尝试改进算法的性能,我想知道是否必须避免重复上述转换,例如,使用以下方法:

int val = ((val1>val2) ? val1 : val2);

PS:我搜索了Stackoverflow,但没有找到类似的答案。

为了便于讨论,我们假设val1和val2都是 double,您仍然希望得到一个int(因为您说这只是一个示例)

我建议首先比较一下你打电话的时间

double val = Math.max(val1, val2)
vs:

如果您正确运行了这个基准测试(意味着在JVM中执行wormup并测量 数百万个电话的通话时间) 您很可能会发现,演员阵容中的时间量与Math.max()相比非常有限

通常,在为了性能而降低代码的可读性和复杂性之前,
首先,你需要知道性能增益是真实的。

你不需要施放,它@KarthikT你假设
val1
val2
都是
int
s@Jonathan在这种情况下,两个例子不是都相同吗?如果你需要投一个,你应该投另一个?Java不会自动处理这种悲观情绪吗?@KarthikT我认为第二条语句可能会取代第一条语句。但是,如果精度有损失,例如
long
->
int
,则第二条语句将无法编译。谢谢!这正是我想要的!
int val = (int) Math.max(val1, val2);