Bazen API'lerin longveya Longveya intveyaInteger ve bunun için nasıl bir karar verildiğini anlayamıyorum?
Ne zaman seçmeliyim?
Bazen API'lerin longveya Longveya intveyaInteger ve bunun için nasıl bir karar verildiğini anlayamıyorum?
Ne zaman seçmeliyim?
Yanıtlar:
Longolduğu Objectşekli longve Integernesne şeklidir int.
longKullandığı 64 bit . intKullanımları 32 bit, ve bu yüzden sadece ± 2 milyar (-2 numara tutabilir 31 +2 31 1).
Kullanmanız gerekir longve intkaldığı yerden miras kalan yöntemleri kullanmanız gerektiği Objectdurumlar gibi hashcode. Java.util.collectionsyöntemler genellikle kutulu ( Objectsarılmış) sürümleri kullanır, çünkü herhangi biri için çalışması gerekir Objectve intya da gibi ilkel bir tür longbir değildir Object.
Diğer bir fark, longve inther bir temelde olmayan Java türlerinde olduğu gibi , Longve Integerher bir değere göre geçiş değeri olmasıdır . Yani bir LongveyaInteger (değil, JNI kodu kullanmadan değişmezler), birini diğerinin üzerinde kullanmanın başka bir nedeni olurdu.
Son bir fark a Longveya Integerolabilir null.
İlkel tipte yapamayacağınız birkaç şey var:
nulldeğere sahip olunObjects ile çalışan bir API'ya geçirinBunlardan herhangi birine ihtiyacınız yoksa, daha az bellek gerektirdiğinden ilkel türleri tercih etmelisiniz.
intsayıları tutarken bir , kullanın .intçok küçükse,longlongçok küçükse,BigIntegerCollection, işleme null, ... içine koyarken ) Integer/ LongkullanınAn int, 32 bitlik bir tam sayıdır; a long64 bitlik bir tam sayıdır. Hangisini kullanacağınız, çalışmayı beklediğiniz sayıların büyüklüğüne bağlıdır.
intve longilkel türlerken, Integerve Longnesnelerdir. İlkel türler daha verimlidir, ancak bazen nesneleri kullanmanız gerekir; Eğer tamsayılar listesini gerekirse örneğin, Java'nın koleksiyon sınıfları nesnelerle ki ancak, bu yüzden bunu bir yapmak zorunda List<Integer>örneğin (eğer kullanamaz, intbir de Listdoğrudan).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 bits (8byte)-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Değişken kullanımınız 32 bit aralığına düşüyorsa, kullanın Int, kullanın long. Genellikle uzun bilimsel hesaplamalarda kullanılır ve bunun gibi şeyler çok fazla doğruluk gerektirir. (örn. pi değeri).
Birini diğerinden seçmenin bir örneği YouTube'un davasıdır. İlk olarak video görüntüleme sayacını
intpopüler bir videoya alındığında 2,147,483,647'den fazla görüntüleme olduğunda taşmış olarak tanımladılar . BirIntsayaç, aralığından daha fazla değer depolayamadığından, YouTube sayacı 64 bitlik bir değişken olarak değiştirdi ve şimdi 9,223,372,036,854,775,807 görüntülemeye kadar sayabilir. Verilerinizi anlayın ve 64 bit değişken olarak uygun olan türü seçin, 32 bit değişkenten daha fazla bellek alır.
Temsil etmek için 32 biti aşabilecek çok uzun bir sayı kullanıldığında, garip davranmayacağınızdan emin olmak için uzun kullanabilirsiniz.
Java 5'ten, int ve Integer kullanımını tamamen aynı hale getirmek için kutu içi ve kutu dışı özelliklerini kullanabilirsiniz. Bu, şunları yapabileceğiniz anlamına gelir:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Ve boks dışarı için aynı (herhangi bir ek dönüşüm olmadan int ve Tamsayı arasında geçiş yapmak için izin Long, Double,Short çok)
Her intzaman kullanabilirsiniz , ancak Integertamsayılarla (örneğin Integer.parseInt(String)) bazı karmaşık işlemleri gerçekleştirmenize yardımcı olabilecek bazı yardımcı yöntemler içerir.
a) nesne Sınıf "Uzun" ile ilkel tip "uzun". (En azından Java ile)
b) İlkel türlerin farklı (hatta belirsiz) bellek boyutları vardır:
Java - hepsi açık: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C. sadece karışıklık: https://en.wikipedia.org/wiki/C_data_types