Pregunta

Estoy convirtiendo manualmente el código de Java (1.6) a C # y encontrar alguna dificultad con el comportamiento de los primitivos (int y doble). En C # parece que casi todas las conversiones se producen automáticamente

        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#

pero en Java sólo algunos están permitidos

        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

Yo estaría agradecido por un análisis sistemático de las diferencias y cualquier lógica subyacente.

¿Fue útil?

Solución

En el ejemplo de C # no hay boxeo o unboxing (y autoboxing) pasando. double es sólo un alias para el struct Double.

En Java, el boxeo es necesario. Debido a tipo borrado , no se puede crear una List<double>, solamente List<Double>. En tiempo de compilación, se convierte en List<?> List<Object> y el boxeo necesidad / unboxing voluntad a tener lugar para que pueda agregar una variable de tipo nativo a un List<Object> o asignar una variable nativa de un elemento de la lista.

Otros consejos

En C #, y double Double son exactamente lo mismo (siempre y cuando usted no ha creado su propio tipo llamado Double, lo que sería estúpido).

double es definido como un alias para global::System.Double. Como tal, no hay boxeo aquí.

En Java, Double es un double en caja, con el tipo de borrado de ser una parte clave de la aplicación genéricos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top