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
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 byte
s int
s 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
,short
eğ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şmez42
aslındaint
ki türü vardırbyte
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.
Dökme Java Tamsayı Çift...
Neden't Jenerik Java ilkel türler...
Nasıl bir pas eşdeğer yapmak için Java...
Neden Java nesne başvurusu bir ilkel d...
İnsanlar neden hala Java ilkel türleri...