Frage

Ich bin manuell konvertieren von code aus Java (1.6) - C# und die Suche nach einigen Schwierigkeiten mit dem Verhalten der primitiven (int und double).In C# scheint es, dass fast alle Konvertierungen automatisch passieren

        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#

aber in Java nur einige sind erlaubt

        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

Ich wäre dankbar für eine systematische Analyse der Unterschiede und die zugrunde liegende Logik.

War es hilfreich?

Lösung

In Ihrem C# - Beispiel gibt es keine Boxen oder unboxing (und autoboxing) passiert. double ist nur ein alias für die struct Double.

In Java, das Boxen notwendig ist.Wegen type-erasure, Sie können nicht erstellen eine List<double>, nur List<Double>.Zur compile-Zeit, List<?> wird List<Object> und Boxen/unboxing stattfinden müssen, so können Sie fügen Sie eine native Typ-variable ein List<Object> oder ordnen Sie einer einheitlichen variable auf ein element der Liste.

Andere Tipps

In C#, double und Double sind genau das gleiche (solange du keine eigene erstellt haben, geben Sie genannt Double,, das wäre dumm).

double ist definiert als alias global::System.Double.Als solche, es gibt keine Boxen hier.

In java, Double ist ein boxed double, mit type-erasure wird ein wesentlicher Teil der Generika-Implementierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top