以下代码完美运行并将 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);
以下代码完美运行并将 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);
这称为自动装箱。它是一种自动将基元转换为其相应对象类型的功能。它从 Java 1.5 开始存在。
自动装箱的反面称为自动拆箱,但要注意 NullPointerException
这称为自动装箱。
请注意,它仍然会Short
自动创建真正的对象,这些对象在您的堆上占用 16 个字节,与 Integer 对象相同。只有原生short
值只占用 2 个字节(但不能放入java.util.collections
)。
在很多情况下
list.put((short) 12345);
list.put((short) 12345);
实际上甚至会创建两个这样的对象,即 32 字节加上列表对象占用的内存。存储在列表中的指针每个已经占用了 4-8 个字节。
如果您只有几个实例,那没关系。如果你有几百万,这可能会因为内存管理和使用而严重影响性能。使用原始短裤,您通常可以走 10 倍的距离,然后才会变慢或内存不足。