Bir tamsayı değişmezi atmak istiyorum (int) burada neden bir fikriniz var mı?
Aşağıdaki örnekte
int i = -128;
Integer i2 = (Integer) i; // compiles
Integer i3 = (Integer) -128; /*** Doesn't compile ***/
Integer i4 = (Integer) (int) -128; // compiles
Integer i4 = -128; // compiles
Integer i5 = (int) -128; // compiles
Integer i6 = (Integer) (-128); // compiles
Integer i7 = (Integer) 0-128; // compiles
(Integer)
-128
dökme yapamam ama (int) -128
dökme edebilirim.
Ben her zaman -128
int
tip ve (int)
ile döküm yedek olması gerektiğini düşündüm.
i3
satırında hata
cannot find symbol variable Integer
Java 6 update 29 ile bunu denedim ve Java 7 update 1.
EDİT: -128
. yerine 128
ile aynı davranışı olsun Tekli ve ikili operatörler arasında karışıklık gibi görünüyor.
CEVAP
Derleyici Integer
17 *döküm yerine (Integer)
128
çıkarmak için çalışır. ()
bunu düzeltmek için ekleyin
Integer i3 = (Integer) -128; // doesn't compile
Integer i3 = (Integer) (-128); // compiles
Yorum BoltClock göre int
dökme ayrılmış bir sözcüktür ve bu yüzden bana göre mantıklı bir tanımlayıcı olarak yorumlanabilir. çünkü beklendiği gibi çalışır.
Ve Bringer128 bu İDEA 15.16 Referans buldum.
CastExpression: ( PrimitiveType Dimsopt ) UnaryExpression ( ReferenceType ) UnaryExpressionNotPlusMinus
Gördüğünüz gibi, ilkel bir türü için döküm UnaryExpression
, bir başvuru türü için ise döküm UnaryExpressionNotPlusMinus
herhangi bir gerektirir gerektirir. Bu sadece JLS 15.15 bir CastExpression önce tanımlanmıştır.
Neden hiç sonuçlandırmak uygulamak ist...
Neden bazı yüzer < karşılaştırmalar...
Neden bulma türü'In başlatıcı bir...
Neden ana 0 burada döndürmez?...
Neden Ruby bölümü yerine tamsayı ondal...