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
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 String
tabanlı 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;
}
Neden küçük bir liste daha küçük bir d...
MySQL üzerinde SQL büyük / küçük harf ...
Neden bir Dize typeclass bir örnek yap...
Neden "Mozilla" dize üzerind...
Neden char[] şifreler için Dize Java t...