Uzun veri türünden neden int olarak bahsettiğini bilmiyorum
O değil. Derleyici mesajlarına güvenmeyi öğrenmelisiniz (özellikle aklı başında, modern derleyicilerden geldiklerinde ve eski C / C ++ derleyicilerinden değillerse). Bazen konuştukları dili deşifre etmek zor olsa da, genellikle size yalan söylemezler.
Tekrar bakalım:
İnt 9223372036854775807'nin değişmez değeri aralık dışı.
O Not gelmez Değişkeninizi söz testLongveya yazın longo yüzden, hiçbir yerinde değil başlatma hakkında. Sorun başka bir noktada ortaya çıkıyor gibi görünüyor.
Şimdi mesajın bazı kısımlarını inceleyelim:
intbize bir şeye bir intdeğer olarak muamele etmek istediğini söyler (ki bu sizin istediğiniz şey değildir!)
- "aralık dışı" oldukça açık: bir şey beklenen aralıkta değil (muhtemelen aralığı
int)
- "Birebir": şimdi ilginç olan: gerçek nedir?
Bir an için değişmezler hakkında konuşmak için rahat listeden çıkacağım: değişmezler, kodunuzda bir miktar değerin olduğu yerlerdir. StringDeğişmezler, intdeğişmezler, classdeğişmezler vb. Vardır . Kodunuzda açıkça bir değerden her bahsettiğinizde , bu gerçek bir değerdir .
Yani aslında değişken bildirimi konusunda sizi rahatsız etmiyor, ama sayının kendisi, değer sizi rahatsız eden şey.
Bunu, a longve intan'nin eşit derecede kabul edilebilir olduğu bir bağlamda aynı değişmezi kullanarak kolayca doğrulayabilirsiniz :
System.out.println(9223372036854775807);
PrintStream.printlnya birint ya da along (ya da hemen hemen her şeyi) alabilir. Öyleyse bu kod iyi olmalı, değil mi?
Eh sayılı, belki de gerektiği olabilir, ama kurallara göre o olduğunu iyi değil.
Sorun, "bazı rakamların" intdeğişmez olarak tanımlanması ve bu nedenle tarafından tanımlanan aralıkta olması gerektiğidir int.
Bir longharfi harfine yazmak istiyorsanız , bunu L(veya küçük harf ekleyerek açıklığa kavuşturmalısınız l, ancak her zaman büyük harfli varyantı kullanmanızı şiddetle tavsiye ederim, çünkü okumak çok daha kolay ve a 1) için hata yapmak daha zordur .
float(Postfix F/ f) ve double(postfix D/ d) ile benzer bir sorunun oluştuğunu unutmayın .
Yan not: hayır olduğunu fark edeceksiniz byteya shortdeğişmezleri ve hala atama değerleri (genellikle olabilir intiçin değişmezleri) byteve shortdeğişkenleri: özel kurallara bağlı mümkündür Atama converson hakkında § 5.2 : izin verirler daha büyük bir tip sürekli ifadelerin atama için byte, short, charya da int eğer tipleri aralığı içinde değerlerdir.