SORU
27 EKİM 2011, PERŞEMBE


&Quot;x = x " x nedir?

Ne bu yapıldığı zaman olur (perde arkasında)?

int x = 7;
x = x  ;

Yani, bir değişken bir ifade ve kendisi için yazılan artan atandığında? Derlenmiş ve idam edildi. x hala 7hatta tüm ifadenin. Benim kitabımda, x artan olduğunu söylüyor!

CEVAP
20 AĞUSTOS 2012, PAZARTESİ


Deyim:

x = x  ;

eşittir:

tmp = x;   // ... this is capturing the value of "x  "
x = x   1; // ... this is the effect of the increment operation in "x  " which
           //     happens after the value is captured.
x = tmp;   // ... this is the effect of assignment operation which is
           //     (unfortunately) clobbering the incremented value.

Kısacası, ifade hiçbir etkisi olmaz.

Anahtar nokta:

  • Postfix arttırma/azaltma ifadesi değeri ifadenin değeriniönceartırma/azaltma gerçekleşir. (Önek bir form durumunda, değer ifadenin değerinisonraoperasyon,)

  • bir atama ifadesinin OLUŞTURDUĞU tamamen değerlendirilir (herhangi artırır, azaltır ve/veya yan etkileri diğer dahil)öncedeğeri BELİRTİN atanır.

C ve C aksine , Java bir ifade değerlendirme sırasını tamamen belirtilen ve platforma özgü değişim için bir oda var hiç unutmayın. Derleyiciler yalnızca bu geçerli iş parçacığı açısından kod yürütme sonucu değiştirir mi yoksa işlemleri yeniden düzenlemek için izin verilir. Bu durumda, bir derleyici olduğunu kanıtladı çünkü tüm deyim yok-op optimize uzakta izin olurdu.


Durumda zaten belirgin değildir:

  • "x = x ;" neredeyse kesinlikle herhangi bir programda bir hata.
  • OP (orijinal soru!) muhtemelen ifade "x ;" yerine "x = x ;".
  • Aynı değişken otomatik ınc/azaltma ve atama birleştiren ifadeleri anlamak zordur, vebu nedenlekaçınılmalıdırbunların doğruluk ne olursa olsun. Sadece böyle bir kod yazmaya gerek yoktur.

Umarım, kod Dama FindBugs ve bayrak kodu gibi bu gibi şüpheli olacaktır PMD.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • kylediablo

    kylediablo

    8 Ocak 2007
  • newport83

    newport83

    19 HAZİRAN 2006