自动装箱和拆箱在 Java 和 C# 中的行为是否不同

2023-11-27

我正在手动将代码从 Java (1.6) 转换为 C#,并发现基元(int 和 double)的行为存在一些困难。在 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

我将不胜感激对差异和任何潜在理由的系统分析。


In C#, double and Double are exactly同样的事情(只要您没有创建自己的类型,称为Double,这将是愚蠢的)。

double is defined作为别名global::System.Double。因此,这里没有拳击。

在Java中,Double是盒装的double,类型擦除是泛型实现的关键部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动装箱和拆箱在 Java 和 C# 中的行为是否不同 的相关文章

随机推荐