在java1.5中,有创建多余对象的新方法,称作自动装箱,它允许程序员将基本数据类型和装箱基本类型混用,按需要进行自动装箱和拆箱。在使用时乱用会导致程序性能存在问题,以下是实验过程。
/**
* @author DunFan.Liao
* @date 2021/10/10 14:00
*/
public class AutoBoxTest
{
public static void main(String[] args)
{
Long sum = 0L;
long startTime = System.currentTimeMillis();
for (long i = 0; i < Integer.MAX_VALUE; i++ )
{
sum += i;
}
long endTime = System.currentTimeMillis();
System.out.println("sum="+sum+"共消耗时间为"+(endTime-startTime)+"ms");
}
}
这是计算所有int的总和
用时7s多,将遍历sum的声明类型由Long改为long
public static void main(String[] args)
{
long sum = 0;
long startTime = System.currentTimeMillis();
for (long i = 0; i < Integer.MAX_VALUE; i++ )
{
sum += i;
}
long endTime = System.currentTimeMillis();
System.out.println("sum="+sum+"共消耗时间为"+(endTime-startTime)+"ms");
}
由7s变成了1s左右
产生速度变化的原因是变量声明的是Long而不是long,意味着程序构造了大约2的31次方多余的Long实例,构造这么多的实例十分影响性能。
得出结论:在程序开发中,要优先使用基本类型而不是封装基本类型,要当心无意识的自动封装。