不需要显式创建Short对象吗?

时间:2012-05-08 19:15:31

标签: java

以下代码完美无缺,并在列表中添加了1和2个值,但为什么呢? 为什么不需要显式创建Short对象?例如:list.add(new Short(1));

List<Short> list = new ArrayList();
list.add((short)1);
list.add((short)2);
System.out.println(list);

2 个答案:

答案 0 :(得分:14)

这称为autoboxing。它是一种自动将基元转换为相应对象类型的功能。它存在于Java 1.5之后。

自动装箱的反面称为自动装箱,但要注意NullPointerException

答案 1 :(得分:1)

这称为自动装箱。

请注意,它仍会自动创建真正的Short个对象,这些对象在堆上占用16个字节,与Integer对象相同。只有本机short值只占用2个字节(但不能放入java.util.collections)。

在许多情况下

list.put((short) 12345);
list.put((short) 12345);
实际上,

甚至会创建两个这样的对象,即32个字节加上列表对象占用的内存。存储在列表中的指针每个占用4-8个字节。

如果您只有几个实例可以。如果您有数百万,由于内存管理和使用,这可能会严重影响性能。对于原始短裤,你通常可以在变慢或失去记忆之前走10倍。