Question

Je suis le code de Java manuellement la conversion (1,6) à C # et de trouver des difficultés avec le comportement des primitives (int et double). En C #, il semble que presque toutes les conversions se produisent automatiquement

        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#

mais en Java seulement quelques-uns sont autorisés

        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

Je serais reconnaissant pour une analyse systématique des différences et toute justification sous-jacente.

Était-ce utile?

La solution

Dans votre exemple C # il n'y a pas de boxe ou unboxing (et autoboxing) qui se passe. double est juste un alias pour le struct de Double.

En Java, la boxe est nécessaire. En raison de , vous ne pouvez pas créer un List<double>, seulement List<Double>. Au moment de la compilation, List<?> devient List<Object> et la boxe / unboxing devra avoir lieu afin que vous puissiez ajouter une variable de type natif à un List<Object> ou affecter une variable native à un élément de la liste.

Autres conseils

En C #, double et Double sont exactement la même chose (aussi longtemps que vous ne l'avez pas créé votre propre type appelé Double, ce qui serait stupide).

double est défini comme un alias à global::System.Double. En tant que tel, il n'y a pas de boxe ici.

En java, Double est un double en boîte, avec le type d'effacement étant un élément clé de la mise en œuvre des génériques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top