2010-07-20 13 views
6

¿Qué sucede cuando un objeto java.lang.Double se inicializa sin utilizar una llamada al constructor sino que utiliza una primitiva? Parece que funciona, pero no estoy muy seguro de por qué. ¿Hay algún tipo de conversión implícita con el compilador? Esto es usando Java 5.Inicialización de un objeto doble con un valor doble primitivo

public class Foo { 

    public static void main(String[] args) { 
     Double d = 5.1; 

     System.out.println(d.toString()); 

    } 

} 
+1

Ahora sabiendo que se llama autoboxing puedes encontrar muchos [artículos interesantes en SO] (http://stackoverflow.com/search?q= [java] + autoboxing) :) –

+0

Autboxing, eso es lo que estaba buscando para. ¡Gracias! –

Respuesta

9

Esto se llama Autoboxing que es una característica que se añadió en Java 5. Se convertir automáticamente entre tipos primitivos y los tipos de envoltura tales como double (el primitivo) y java.lang.Double (la envoltura de objetos). El compilador de Java transforma automáticamente la línea:

Double d = 5.1; 

en:

Double d = Double.valueOf(5.1); 
5

Se llama AutoBoxing

Autoboxing y Auto-Unboxing de tipos primitivos Conversión entre tipos primitivos, como int, boolean, y sus contrapartes equivalentes basadas en Object como Integer a nd Boolean, puede requerir cantidades innecesarias de codificación adicional, especialmente si la conversión solo es necesaria para un método llamada a la API de colecciones, para el ejemplo .

El autoboxing y auto-unboxing de primitivos de Java produce código que es más concisa y fácil de seguir. En , el siguiente ejemplo int se está almacenando en y luego se ha recuperado de un ArrayList. La versión 5.0 deja la conversión necesaria para realizar la transición a un Entero y volver al compilador.

Antes

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, new Integer(42)); 
    int total = (list.get(0)).intValue(); 

Después

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, 42); 
    int total = list.get(0); 
Cuestiones relacionadas