SORU
24 ŞUBAT 2010, ÇARŞAMBA


Neden't Java koşullu ve şartlı-veya operatörler bileşik atama sürümleri yok? (&&=, ||=)

Boolean değerleri, Java ikili operatörler için*, , *, *5|*4& ve || vardır.

Kısaca burada ne yaptıklarını özetleyelim:

Her iki işlenen değerler true &, true; aksi halde, sonuç false.

Her iki işlenen değerler false |, false; aksi halde, sonuç true.

Eğer işlenen değerler farklıysa true ^ için; aksi halde, sonuç false.

&& operatör & ama eğer sol işlenen onun değeri true ise sadece sağ el işlemi sonucunda değerlendirir.

|| operatör |, ama eğer sol işlenen onun değeri false ise sadece sağ el işlemi sonucunda değerlendirir.

Şimdi, tüm bunların arasında 5, 3 bileşik atama sürümleri |=, &= ^= yani. Benim soru açıktır: neden &&= ||= sağlamak da Java değil mi? O &= |= ihtiyacım var daha çok ihtiyacım var.

Ve "uzun Java >>>= vardır. çünkü" iyi bir cevaptır, çünkü bu çok sanmıyorum Bu ihmal için daha iyi bir nedeni olmalı.


15.26 Assignment Operators:

12 atama operatörleri vardır; [...] = *= /= %= = -= <<= >>= >>>= &= ^= |=


Yorum &&= ||= uygulanmış, sağ taraftaki ilk değerlendirme yok, sadece operatörler olacağını yapıldı. Bileşik atama operatörü sağ tarafta değerlendirilen bu kavram ilk bir hata olduğuna inanıyorum.

15.26.2 Compound Assignment Operators:

E1 op= E2 T * * * * E1 = (T)((E1) op (E2)) eşdeğer formun bileşik atama ifadesi E1 yalnızca bir kez değerlendirilir dışında E1, türüdür.

Kanıt olarak, aşağıdaki kod ** 40, ArrayIndexOutOfBoundsException atar.

    int[] a = null;
    int[] b = {};
    a[0]  = b[-1];

CEVAP
24 ŞUBAT 2010, ÇARŞAMBA


Bir şey gibi, çünkü muhtemelen

x = false;
x &&= someComplexExpression();

görünüyorgibi x atama olmalı ve someComplexExpression() ama değerlendirme x değerine bağlı olması değerlendirme sözdizimi ' belli değil.

Java sözdizimi C dayanır, ve kimse bu operatörler eklemek için acil bir ihtiyaç gördüm çünkü. Muhtemelen daha iyi bir if ifadesi, zaten.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • HuskyStarcraft

    HuskyStarcra

    4 HAZİRAN 2009
  • olinerd

    olinerd

    23 AĞUSTOS 2007