SORU
3 Aralık 2008, ÇARŞAMBA


Neden't ben bir Dize üzerinde geçiş yapabilir?

Neden bir Dize anahtarı olabilir mi?

Bu işlevi, daha sonra bir Java sürümü koymak olacak?

Birisi bir makale için beni işaret edebilir, ya da kendilerini açıklarnedenOlarak bunu yapamam, teknik şekilde Java switch deyimi çalışır?

CEVAP
3 Aralık 2008, ÇARŞAMBA


Switch ifadelerinde String bazı durumlarda uygulanıyor Java SE 7 en az 16 yıl after they were first requested. net Bir nedenden dolayı gecikme oldu verilmez, ama büyük olasılıkla yapmak zorundaydım performans.

Yazılım ve programları 7 Uygulama

feature şimdi yürütülen javac with a "de-sugaring" process; temiz, üst düzey sözdizimi kullanarak String sabitler case bildirimleri genişletilmiş at derleme zamanı içine daha karmaşık kod aşağıdaki bir desen. Sonuç kodu her zaman var olduklarını JVM talimatları kullanır.

switch String bir olgu derleme sırasında iki düğme çevrilir. Benzersiz bir tamsayı ve bir-ilk haritalar her dize;orijinal anahtar konumu. Bu ilk etiketi karma kodu değiştirerek yapılır. İlgili dava dize eşitlik testleri if bir deyim vardır; Eğer karma çarpışmalar ise, test if-else-if Bir basamaklı. İkinci düğmesi orijinal kaynak kodu aynalar, ama yerine davayla ilgili yerlerine ile etiketler. İki adımdan oluşan bu süreç kolay akışını orijinal Geçiş Kontrol korumak için yapar.

JVM içinde geçer

switch, Daha fazla teknik derinlik compilation of switch statements açıklanan JVM Belirtimi için başvurabilirsiniz. Sabitler durumlarda kullanılan kıtlık bağlı olarak özetle, bir geçiş için kullanılabilecek iki farklı JVM talimatları vardır. Hem de her durum için bir tamsayı sabitleri kullanarak verimli bir şekilde yürütmek için bağlı.

Eğer sabitler yoğun bir dizin (en düşük değeri düşüldükten sonra) Yönerge işaretçisi-bir tabloya; tableswitch talimat olarak kullanılır.

Eğer sabitler seyrek, doğru durumda ikili arama yapılan&; lookupswitch Yönerge -.

De-şeker ** 12 ** 13 * bir nesne, hem de talimatları kullanılmış olması muhtemeldir. lookupswitch hash kodları ilk geçiş davanın orijinal konumunu bulmak için uygundur. Sonuç sıra tableswitch bir doğal bir uyum.

Hem talimatları tamsayı sabitleri her davaya atanan derleme zamanında sıralanmış olması gerekir. Çalışma zamanında ise O(1) performans tableswitch genellikle görünür daha iyi O(log(n)) performans lookupswitch bunu gerektirir bazı analiz olup olmadığını belirlemek için tablo yoğun kadar haklı uzay-zaman değiş tokuş. Bill Venners daha ayrıntılı olarak bu kapakları a great article ile birlikte diğer Java akış kontrol talimatları altında-luk bak bir yazdı.

7 önce GÖRDÜM

Önce 7, enum komple cam için Stringtabanlı yaklaşık bir anahtarı olabilir. Bu the static valueOf yöntem enum Her tür derleyici tarafından oluşturulan kullanır. Örneğin:

Pill p = Pill.valueOf(str);
switch(p) {
  case RED:  pop();  break;
  case BLUE: push(); break;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gan Eden Productions

    Gan Eden Pro

    11 HAZİRAN 2011
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Valdorsha

    Valdorsha

    8 Mayıs 2006