2016-01-28 35 views
7

Derleyici mi, yoksa çalışma zamanı otomatik kutu/kutudan çıkarılıyor mu?Otomatik kutulama/kutucukluk kim yapacak?

aşağıdaki örneğe bakalım: (1), ilk tamsayı değeri new Integer(1) gibi bir çevrilecektir de

public Integer get() { 
    return 1; //(1) 
} 

ve geri döndü. Bu, otomatik kutulama olarak bilinen bir tür örtük bir ihanettir, ancak bunu kim yapacak? Derleyici mi, JVM mi?

Sadece ASM'yi öğrenmeye başlamıştım ve böyle bir boks sorunu beni gerçekten şaşırtıyor.

+0

bunu dikkate alır: int a = myScan.nextInt(); Tamsayı b = a; Derleyici, ne değere sahip olamayacağını bilmeden bunu nasıl yapacak? – Stultuske

+0

@Stultuske Derleyici, 'Tamsayı b = Tamsayı.valueOf (a);' olacaktır. Basit. 'A' değerini bilmesi gerekmiyor. Ayrıca bu soruya verilen cevaplara da bakınız. –

cevap

11

Sen javap -c komutunu kullanarak demonte kodu görebilirsiniz:

public class Example { 
    public Example(); 
    Code: 
     0: aload_0 
     1: invokespecial #1 // Method java/lang/Object."<init>":()V 
     4: return 

    public java.lang.Integer get(); 
    Code: 
     0: iconst_1 
     1: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     4: areturn 
} 

Sen Integer#valueOf çağrılan olduğunu görebilirsiniz, böylece gerçek kod için tercüme:

public Integer get(){ 
    return Integer.valueOf(1); 
} 

Sonuç :

Derleyici bunu sizin için yapar.

+0

Teşekkürler, şimdi koduma birkaç satır daha eklemeliyim ... – glee8e

1

Autoboxing, Java derleyicisinin ilkel türleri ile bunlara karşılık gelen nesne sarmalayıcı sınıfları arasında yaptığı otomatik dönüştürme işlemidir.

İlgili konular