2015-04-02 17 views
8

Projemde alabildiğim Java temel öğelerinin boyutunu tanımlayan bir paket var mı? Bazı manuel bit ayarları yapıyorum ve bir bayt dizini tutuyorum. Ben kendim tanımlayabilirsiniz tahmin Doğrusu currentByte += <SomePackage>.SIZE_OF_INTJava, ilkel türlerinin boyutunu her yerde tanımlar mı?

yap, ben (sihirli numaralar hoş karşılanmaz edilir) bir int ayarlarken currentByte += 4 yapmak istemiyorum, ama o bir yerde mevcuttur, özellikle tür aksak var.

+2

[Java İlkel Veritipleri] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) – nem035

+2

Eğer currentByte', muhtemelen daha iyi bir veri yapısı var 'kullanıyorsanız Bir arabellek gibi kullanabilir. – chrylis

+0

Süreç nedenlerinden dolayı değişiklikleri minimumda tutmaya çalışıyorum, ancak bu bir düşünceyi verecektir. – ventsyv

cevap

24

Sınıf değil, ancakve Long ve kayan nokta sınıfları için de var. Ayrıca *.BYTES var.

nedenle Integer.SIZEDouble.SIZE 64 ve Double.BYTES 8, vs vs olduğu, Integer.BYTES 4 olduğu, 32 olduğu; Bunların hepsi merak ediyorsanız int s.

NOT: *.BYTES sadece

(? *.SIZE Java 5 çıktı ama doğru, en azından kullanımını yapmak )

(fark için teşekkürler @Slanec) Java 8 yana tanımlanır Ve evet, bu JLS'nin kendisi ilkel tiplerin boyutunu tanımladığı için JDK tarafından tanımlanır; Bu nedenle, ne olursa olsun hangi platformda olursa olsun Java uygulamasında bu sabitler için aynı değerlere sahip olacağınız garanti edilir.

+0

Java SE 7 benim hedef dağıtımım. – ventsyv

+0

@ventsyv daha sonra en az * * .SIZE ' – fge

8

ilkelleri boyutu dağılımı Java dil belirtimi içerdiği, Section 4.2

yekpare türleri, değerleri, uzun bayt, kısa, int ve 8-bit, 16-bit, Sırasıyla 32-bit ve 64-bit imzalı iki hem-tamamlayıcı tamsayılar ve değerleri UTF-16 kod birimlerini temsil eden 16-bit işaretsiz tamsayı olan char (§3.1).

Bu olduğunu standart ve değişmez, böylece karşılık bunları ithal etmek zorunda değildir. fge olarak noktalar üzerinden, bu sihirli sayılar olduğuna saklanmasıdır olsa Sen (sihirli sayılar olarak kullanabilirsiniz Java 5'ten bu yana çeşitli sarıcı sınıflarında hassas yerlerde ve bunları yeniden tanımlamak yerine bunları kullanmalısınız.

+1

standartlarına uyuyor. – shookees

+3

standartlarının değişmesi, bu değerlerin herhangi bir değişikliğinin, tüm sınıf dosyaları için ve bunların geriye ve ileriye dönük uyumluluğunun kırılması olacaktır.'Kodunuz artık * tasarlandığı gibi çalışmaz', 'kodunuz artık çalışmıyor' ile kıyaslandığında küçük olacaktır. Bunların hiç değişmeyeceğine ve Java'da kalabileceğine inanmıyorum. Integer.SIZE'nin statik bir final olduğu ve derleme zamanında değiştirildiği göz önüne alındığında, Tamsayı değerindeki değerin kullanılması, eğer değiştirilecekse, daha sonraki bir sürümde değişmesi için de bir kırılma değişikliği olacaktır. –

+3

Shookees, standartların değiştiğine kesinlikle katılıyorum, ancak bunu genellikle değişmeyecek bir şey olarak adlandırıyorum. Oracle, Java'nın arkasındadır ve Oracle, bu tür şeyleri değiştirecek türden bir şirket değildir. Benzer şirketlere ve konsorsiyumlara göre standartlara bakmak, değişmekten kaçınmak için geriye doğru eğilecekleri ayrıntıdır. Dil özellikleri Oracle'ın bunu değiştirmesine neden olacak kadar zorlandıysa, endişelerinizin en küçük boyutlarının olacağı birçok başka sorun olacağını düşünmekteyim. –

İlgili konular