SORU
21 Mart 2010, Pazar


Kısayol "-atama ve; ( = | ) Java operatör"

Java karşılaştırmalar yapmak için uzun bir set var, ve eğer onlardan biri ya da daha doğru olarak bilmek istiyorum. Karşılaştırma dize ve uzun okumak zor, okunabilir olmaları için ayrıldım, ve otomatik olarak bir kısayol operatörü |= yerine negativeValue = negativeValue || boolean kullanmak için gitti.

boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);

negativeValue varsayılan herhangi bir<> true bekliyorum; değerleri negatif. Bu geçerli mi? Bekliyorum ne yapacak? Güneş sitesi veya stackoverflow üzerinde söz göremedim, ama gölgede bir sorun var gibi görünmüyor ve bu kodu derler ve çalıştırır.


Benzer şekilde, eğer birkaç mantıksal kavşak gerçekleştirmek isteseydim, && yerine &= kullanabilir miyim?

CEVAP
21 Mart 2010, Pazar


|= bileşik atama operatörü (JLS 15.26.2) boolean mantıksal işleç | (JLS 15.22.2); ile karıştırılmamalıdır şartlı veya || (JLS 15.24). Ayrıca &= ^= boolean bileşik atama sürümüne karşılık gelen mantıksal & ^ sırasıyla vardır.

boolean b1, b2, diğer bir deyişle, bu iki eşdeğer

 b1 |= b2;
 b1 = b1 | b2;

Fark arasındaki mantıksal operatörler (& |) göre kendi koşullu karşılıkları (&& ||) bu eski "kısa devre"; ikincisi. Yani:

  • & |her zamanher iki işlenen değerlendirir
  • && || sağ işlenen değerlendirirkoşullu olarak; sağ işlenen değeri ikili işleminin sonucunu etkileyebilecek eğer sadece değerlendirilir. Doğru işlenen değerlendirilmesi anlamına gelir:
    • && sol işlenen falsedeğerlendirir
      • hayır sağ işlenen değerlendirir ne olursa olsun (çünkü, tüm ifade ** 27)
    • || sol işlenen truedeğerlendirir
      • hayır sağ işlenen değerlendirir ne olursa olsun (çünkü, tüm ifade ** 30)

Yani dönüyorsunuz özgün soru, Evet, inşa etmek geçerli ve süre |= değil tam olarak eşdeğer bir kısayol için = ||, yok hesaplamak ne istiyorsun. Kullanımı |= operatörün sağ tarafı basit tamsayı karşılaştırma işlemi olduğu için | kısa devre olmadığı gerçeği önemsİzdİr.

Shortcircuiting istediğiniz durumlar vardır, hatta gerekli, ama senaryonuz onlardan biri değil.

Diğer bazı dillerin aksine Java &&= ||= yok talihsiz bir durumdur. Bu söz konusu tartışıldıWhy doesn't Java have compound assignment versions of the conditional-and and conditional-or operators? (&&=, ||=).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • listedabive

    listedabive

    30 Ocak 2007
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008