更新时间:2023年07月27日09时41分 来源:传智教育 浏览次数:
在Java中,int和Integer都用于表示整数,但它们有一些重要的区别,尤其在内存占用方面。
1.int: int是Java的基本数据类型(primitive data type)。它是用于表示整数的原始类型,占用固定的内存空间。在32位系统中,int占用4个字节(32位),在64位系统中也通常是4个字节。
int num = 42;
2.Integer: Integer是Java中的包装类(Wrapper Class),它提供了一种将int类型转换为对象的方法。Integer类包含一个int类型的成员变量,因此它需要更多的内存来存储额外的对象信息。在Java 7及之前的版本中,Integer对象占用16字节(64位系统),其中包含12字节的对象开销和4字节的整数值。但是从Java 8开始,Java对一些常用整数范围(-128 到 127)进行了缓存,使得这些值在运行时复用,因此会节省一些内存。
Integer number = 42;
对比内存占用:考虑创建大量整数的情况,我们来演示int和Integer的内存占用情况:
public class MemoryComparison { public static void main(String[] args) { int sum1 = 0; Integer sum2 = 0; long startTime1 = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { sum1 += i; } long endTime1 = System.currentTimeMillis(); long startTime2 = System.currentTimeMillis(); for (Integer i = 0; i < 1000000; i++) { sum2 += i; } long endTime2 = System.currentTimeMillis(); System.out.println("int sum: " + sum1); System.out.println("Time taken by int: " + (endTime1 - startTime1) + "ms"); System.out.println("Integer sum: " + sum2); System.out.println("Time taken by Integer: " + (endTime2 - startTime2) + "ms"); } }
这个代码演示了用int和Integer计算累加和,并测量了它们的执行时间。
注意:在实际应用中,不应该仅基于内存占用选择使用int还是Integer。通常,如果你需要在集合类(如 List、Map)中存储整数,使用Integer是更好的选择,因为它允许在集合中存储null值。而对于简单的整数运算,使用int是更高效的选择。在Java 8以后,由于自动拆箱和装箱的优化,使用Integer进行简单的数学运算性能损失并不明显。