以下代码完美无缺,并在列表中添加了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);
答案 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倍。