Sağlanan cevapları biraz genişletiyorum (şimdiye kadar , programlama dillerini oluşturma sahnesinin arkasındaki daha büyük resme bakmak yerine, belirli bir dili programlamaya odaklanan "kendi" / yapay terminolojisine odaklandıkları için , yani, tip güvenliği ve bellek ile ilgili hususlar fark yaratır):
int boolean değil
Düşünmek
boolean bar = true;
System.out.printf("Bar is %b\n", bar);
System.out.printf("Bar is %d\n", (bar)?1:0);
int baz = 1;
System.out.printf("Baz is %d\n", baz);
System.out.printf("Baz is %b\n", baz);
çıktı ile
Bar is true
Bar is 1
Baz is 1
Baz is true
3 satırda Java kodu (bar)?1:0
göstermektedir çubuğu ( boolean örtülü bir içine (dökülmüş) dönüştürülemez) int . Bunu, JVM'nin arkasındaki uygulamanın ayrıntılarını göstermek için değil, düşük düzeyli hususlar (bellek boyutu olarak) açısından, tür güvenliği yerine değerleri tercih etmesi gerektiğine işaret ediyorum. Özellikle bu tip emniyet, kontrollerin şu şekilde yapıldığı boole tiplerinde olduğu gibi gerçekte / tam olarak kullanılmıyorsa
{0,1} içindeki \ değeri boolean türüne dönüştürülürse, bir istisna atayın.
Hepsi sadece {0,1} <{-2 ^ 31, .., 2 ^ 31 -1} olduğunu belirtmek için. Aşırı silah gibi görünüyor, değil mi? Tip güvenliği, ilkel öğelerin örtülü olarak dökümünde değil, kullanıcı tanımlı türlerde gerçekten önemlidir (sonuncusu ilkinde yer almasına rağmen).
Baytlar tür veya bit değildir
Bellekte, {0,1} aralığındaki değişkeninizin, özel olarak ilgilenilmedikçe (örneğin bellekte iyi paketlenmiş - 8 "boolean" olmadığı sürece en az bir bayt veya bir kelime (kaydın boyutuna bağlı olarak xbits) işgal edeceğini unutmayın. 1 bayt - ileri geri).
Ekstra değer paketlemesine (örneğin, bit kayması veya aritmetik kullanarak) tip güvenliğini (belirli bir türdeki bir kutuya değer koymak / sarmak gibi) tercih ederek, daha fazla bellek kazanmak için daha az kod yazmayı etkili bir şekilde seçer. (Öte yandan, Boolean'dan daha değerli olmayan tüm dönüşümü kolaylaştıracak özel bir kullanıcı türü her zaman tanımlanabilir).
anahtar kelime ve tür
Son olarak, sorunuz anahtar kelime ile türü karşılaştırmakla ilgilidir . Anahtar kelimeler (" ilkel olarak işaretlendi" ) türleri (başka bir anahtar kelime sınıfı kullanarak normal bileşik kullanıcı tanımlı sınıflar) kullanarak veya başka bir deyişle tercih ederek / tam olarak nasıl performans alacağınızı açıklamanın önemli olduğuna inanıyorum.
boolean foo = true;
vs.
Boolean foo = true;
İlk "şey" (tür) bir sebep olmadan genişletilemez (alt sınıflandırılamaz). İlkel ve sarma sınıflarının Java terminolojisi basitçe satır içi değere çevrilebilir (bir LITERAL veya ikameyi çıkarmak veya mümkün değilse hala değeri sarmalamaya geri dönüş mümkün olduğunda derleyici tarafından ikame edilen bir sabit).
Optimizasyon önemsiz olduğundan dolayı gerçekleşir:
Msgstr "Az çalışma zamanı döküm işlemleri => daha fazla hız."
Bu nedenle, gerçek tür çıkarımı yapıldığında (gerekirse), gerekirse tüm tür bilgileri ile (veya buna dönüştürmek / döküm yapmak) sarma sınıfının örneklenmesiyle sonuçlanabilir.
Bu nedenle, boolean ve Boolean arasındaki fark tam olarak Derleme ve Çalışma Zamanı'ndadır (biraz uzak ama neredeyse instanceof vs. getClass () ).
Son olarak, otomatik boks ilkellerden daha yavaştır
Java'nın otomatik boks yapabileceği gerçeğinin sadece bir "sözdizimsel şeker" olduğuna dikkat edin . Hiçbir şeyi hızlandırmaz, sadece daha az kod yazmanıza izin verir. Bu kadar. Döküm ve tip bilgi kabına sarma hala yapılmaktadır. Performans nedenlerinden ötürü, tip güvenliğini uygulamak için tip bilgisi ile sınıf örnekleri oluşturmanın her zaman ekstra temizliğini atlayacak aritmetiği seçin. Tip güvenliği olmaması, performans kazanmak için ödediğiniz fiyattır. Boole değerine sahip ifadeler içeren kodlar için güvenlik türü (daha az yazdığınızda ve dolayısıyla örtük kod yazdığınızda ) örneğin if-then-else akış denetimleri için kritik olacaktır.