SORU
14 HAZİRAN 2013, Cuma


Java ilkel dökme ve atamaları

Aşağıdaki yanlış anlıyorum:

byte a = 3; 
byte b = 8; 
byte c = a   b;  // compile error

Derleme değil. İfadeler her zaman int bir neden. Açık dökme yapmalıydık ki:

byte c = (byte) (a   b);   // valid code

AmaAşağıdaki doğru olduğunu anlayamıyorum:

byte d = 3   8;   // it's valid! why?

Literal tamsayı (3 veya 8 gibi) her zaman örtülü olarak int Bir çünkü. int-or-smaller ifadeler her zaman int Bir çok neden. Herkes burada neler olduğunu açıklayabilir mi?

Sanırım yapabileceğim tek şey, derleyici aşağıdaki bu ifade eşittir:

byte d = 11;

ve bu bir ifadeyi dikkate almaz.

CEVAP
14 HAZİRAN 2013, Cuma


Bu vardıraz†ya 3 8 derleme zamanı 11 değerlendirilir olup olmadığını, ve bunu yapmak içindaha fazlahatta derleyici açıkça örtülü olarak belirli durumlarda bytes ints daraltmak için izin verilir. Özellikle, dil belirtimi açıkça derleme zamanı byte sığabilir bu tür sabit ifade int byte daraltma örtük dönüştürmeler izin verir.

JLS here is section §5.2: ilgili bölüm

Eğer bu ifade bir sabit ifade (§15.28) tipi byte, shorteğer,ek olarak, char int:

  • Daralma ilkel bir dönüşüm türü olabilir değişken byte, short char,ve bu sabit değeri ifade değişken türü olarak gösterilebilir.

Sabitler derleme zamanı daralan kodu gibi anlamına gelir: byte theAnswer = 42; izin verilir. Daralma olmadan, tamsayı değişmez 42 aslında int ki türü vardır byte alçı gerekli olacak demek

†: Açıkçası, şartname başına, sabit ifade ederseniz daha dar türüne uygun olup olmadığını görmek için değerlendirilmesi gerekir.Ama çarpıcı bir noktası belirtimi bu bölüm olmadan, derleyici daraltma örtük dönüştürme yapmak için izin vermiyor.

- Açık konuşalım:

byte a = 3; 
byte b = 8; 

Nedeni bubuizin şartname yukarıdaki bölüm yüzünden. Yani, derleyici sabit örtülü daralma dönüşüm byte 3 yapmak için izin verilir. Derleyici sabit ifadenin değerini derleme zamanında 35 ** 34 ** değerlendirir diye değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • parlophone

    parlophone

    28 ŞUBAT 2006
  • sonia989

    sonia989

    26 EKİM 2006
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009