我知道我可以将任何类型的对象添加到ArrayList
实例中。如果我做对了,那么引用类型将被转换为对象(值类型被加框)。另外,ArrayList
是否实际存储了引用类型对象的对象列表?
答案 0 :(得分:4)
ArrayList
类在内部使用固定大小的数组object[]
(对象数组)进行存储。添加元素时,这些元素会自动复制到数组中各自的索引。达到最大大小时,将创建一个具有更大大小的新阵列,并重新复制元素。所以它只是一个围绕静态对象数组的便利包装器。
答案 1 :(得分:2)
ArrayList
不存储对象,而仅存储对这些对象的引用。
答案 2 :(得分:2)
ArrayList
本质上是object[]
的包装器,具有跟踪数组中空间并根据需要增长(加倍)的功能。请注意,通常List<T>
是首选,但回答问题:是的,它只存储对object
的引用,这些引用可能是盒装值类型。
List<T>
几乎相同,但在T[]
附近,这意味着可以在没有装箱的情况下存储值类型。引用类型仍存储为引用。您还可以获得更多类型安全性;即你不能添加错误的东西,也不能不正确地投射检索到的物品。
答案 3 :(得分:1)
ArrayList
与List<object>
类似,是在.NET具有泛型之前创建的。
它可以存储任何派生自object
的内容,它们都是引用和值类型。所以你可以用它来存储一个对象列表。
答案 4 :(得分:1)
ArrayList
的内部存储是一个对象数组(object[]
)。
在ArrayList
中存储引用类型时,引用只会转换为object
并存储在数组中。引用类型实例本身包含有关它的类型的信息,因此当您从ArrayList
获取它时,可以将其强制转换为实际类型。
值对象内部装箱,对该对象的引用存储在数组中。该对象包含有关该值的类型的信息,以便在从ArrayList
获取该值时可以正确取消装箱。
答案 5 :(得分:0)
他们存储任何object
。
意味着只要将它们实例化为对象,就可以用字符串,整数,类填充它们。