我手动将Java(1.6)中的代码转换为C#,并发现原始类型(int和double)的行为有些困难。在C#中出现,几乎所有的转换是自动发生自动装箱和取消装箱在Java和C中的行为方式有所不同#
List<double> list1 = new List<double>(); // legal, C#
double d0 = 3.0;
list1.Add(d0); // legal, C#
Double dd = 2.3f; // legal, C#
list1.Add(dd); // legal, C#
List<Double> list2 = new List<Double>(); // legal, C#
double d1 = 3.0;
list2.Add(d1); // legal, C#
list2.Add(2.0); // legal, C#
double d2 = list2.get(0); // legal, C#
但在Java中只有一些被允许
List<double> list1 = new ArrayList<double>(); // illegal, Java
List<Double> list2 = new ArrayList<Double>(); // legal, Java
double d1 = 3.0;
list2.add(d1); // legal, Java
list2.add(2.0); // legal, Java
double d2 = list2.get(0); // legal, Java
我会为的差异进行系统的分析和任何理论基础感谢。
我之前的印象是列表早在Java中使用Type Erasure之前就存在了,还是我误解了你的意思? –
RHSeeger
@RHSeeger,列表是一个泛型类型。 Java中泛型使用Type Erasure实现。所以这意味着列表在Type Erasure(至少使用Type参数)之前不存在。请注意,列表将被转换为原始类型列表。 –