1、通过泛型
//obj是一个int类型的值类型,在new Test的时候传进去的obj是就会装箱成引用类型,以为Test类是引用类型
int obj = 2;
Test test = new Test(obj);
//通过泛型这里obj传进去的就是值类型,就不需要装箱了
Test<int> test = new Test<int>(obj);
第一段代码中会发生装箱,因为int
类型的值被传递给一个引用类型的构造函数。而第二段代码中不会发生装箱,因为Test<int>
是一个泛型类,它直接使用int
作为类型参数,而不需要将其转换为引用类型。
2、使用泛型List,不用ArrayList
List是泛型的不会发生装箱,而ArrayList
存储的是对象的引用,当你存储值类型时,会发生装箱。
// 创建一个ArrayList实例
ArrayList arrayList = new ArrayList();
// ArrayList可以存储任何类型的对象,因此不需要指定类型参数
arrayList.Add(10); // 自动装箱为object
// 使用泛型 List<int> 存储整数
List<int> intList = new List<int>();
intList.Add(10);//不会装箱
在上述示例中,我们使用了 List<int>
来存储整数,使用 List<string>
来存储字符串。泛型的 List<T>
提供了类型安全,避免了像 ArrayList
那样可能出现的类型不匹配问题。