【发布时间】:2019-12-24 01:15:15
【问题描述】:
通常编译器会生成代码来执行装箱和拆箱。但是,如果不需要装箱的值,编译器会做什么? (Oracle 标准)编译器是否足够聪明,可以将其优化掉?
看看这个方法:
public static void requireInRange(int index, Object[] array) {
if(index < 0 || index >= array.length)
throw new IndexOutOfBoundsException();
}
唯一相关的信息是array.length,因此例如将数组的每个值装箱是没有用的。就像在这段代码中一样:
int[] anArray = {3, 4, 2};
requireInRange(3, anArray);
编译器是否会实际插入代码来装箱数组的每个值?
【问题讨论】:
-
在一般情况下使用 Java,不必担心过早优化。编写代码,使其易于阅读/理解/修改/等,并让 Hotspot 或 $otherJVM 负责运行时优化。如果事情进展缓慢,请分析以找出原因,然后进行优化。 (评论而不是回答,这不是对您问题的直接回答)
-
这里没有自动装箱。你在说什么?
标签: java performance autoboxing