Domanda

I sono la conversione manualmente il codice da Java (1.6) per C # e trovando qualche difficoltà con il comportamento di primitivi (int e doppio). In C # sembra che quasi tutte le conversioni avvengono automaticamente

        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#

, ma in Java solo alcuni sono autorizzati

        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

Sarei grato per un'analisi sistematica delle differenze e di qualsiasi logica sottostante.

È stato utile?

Soluzione

Nel vostro C # esempio non c'è la boxe o unboxing (e autoboxing) accadendo. double è solo un alias per il struct Double.

In Java, il pugilato è necessario. A causa di cancellazione , non è possibile creare un List<double>, solo List<Double>. Al momento della compilazione, List<?> diventa List<Object> e la boxe / unboxing dovrà avvenire in modo da poter aggiungere una variabile di tipo nativo di un List<Object> o assegnare una variabile nativo ad un elemento della lista.

Altri suggerimenti

In C #, double e Double sono esattamente la stessa cosa (a patto che non si è creato il proprio tipo di chiamata Double, che sarebbe stupido).

double è definito come alias per global::System.Double. Come tale, non c'è la boxe qui.

In Java, Double è un double scatolato, con il tipo-cancellazione essendo una parte fondamentale dell'implementazione generici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top