Czasami widzę, że API używa long
lub Long
lub int
lub Integer
i nie potrafię zrozumieć, w jaki sposób podejmowana jest decyzja?
Kiedy mam wybrać co?
Long
jest Object
formą long
i Integer
jest formą przedmiotu int
.
long
Wykorzystuje 64 bitów . Do int
zastosowania 32 bitów, a więc może posiadać tylko numerów w zakresie ± 2000000000 (-2 +31 do + 2 31 1).
Powinieneś używać long
i int
, z wyjątkiem sytuacji, gdy musisz korzystać z metod odziedziczonych z Object
, takich jak hashcode
. Java.util.collections
metody zwykle używają wersji pudełkowanych ( Object
-wrapowanych), ponieważ muszą działać dla każdego Object
, a typ pierwotny, taki jak int
lub long
, nie jest Object
.
Inną różnicą jest to, że long
i int
są przekazywane przez wartość , podczas gdy Long
i Integer
są wartościami przekazywanymi przez odwołanie , podobnie jak wszystkie inne niż pierwotne typy języka Java. Więc jeśli byłaby możliwa modyfikacja Long
lub Integer
(tak nie jest, są niezmienne bez użycia kodu JNI), byłby inny powód, aby używać jednego nad drugim.
Ostatnia różnica polega na tym, że a Long
lub Integer
może być null
.
Jest kilka rzeczy, których nie można zrobić z typem prymitywnym:
null
wartośćObject
sJeśli nie potrzebujesz żadnego z nich, powinieneś preferować typy prymitywne, ponieważ wymagają mniej pamięci.
źródło
int
, gdy trzymasz numery.int
jest zbyt mały, użyj plikulong
long
jest zbyt mały, użyjBigInteger
Collection
, obsługanull
, ...) użyj zamiast tegoInteger
/Long
źródło
An
int
jest 32-bitową liczbą całkowitą; along
jest 64-bitową liczbą całkowitą. To, którego użyć, zależy od tego, jak duże są liczby, z którymi zamierzasz pracować.int
ilong
są typami prymitywnymi, podczas gdyInteger
iLong
są obiektami. Typy prymitywne są bardziej wydajne, ale czasami trzeba użyć obiektów; na przykład klasy kolekcji w Javie mogą działać tylko z obiektami, więc jeśli potrzebujesz listy liczb całkowitych, musisz nadać jejList<Integer>
na przykład a (nie możesz używać bezpośrednioint
w aList
).źródło
Liczba całkowita to 32-bitowa liczba całkowita ze znakiem
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long to 64-bitowa liczba całkowita ze znakiem
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Jeśli użycie zmiennej mieści się w zakresie 32-bitowym, użyj
Int
, w przeciwnym razie użyjlong
. Zwykle długie jest używane do obliczeń naukowych i takie rzeczy wymagają dużej dokładności. (np. wartość pi).źródło
Jeśli chodzi o użycie bardzo długiej liczby, która może przekraczać 32 bity, możesz użyć long, aby upewnić się, że nie będziesz mieć dziwnego zachowania.
W Javie 5 możesz używać funkcji in-boxing i out-boxing, aby korzystanie z int i Integer było całkowicie takie samo. Oznacza to, że możesz:
In i out boksu pozwalają przełączać się między int i Integer bez dodatkowej konwersji (taka sama dla
Long
,Double
,Short
zbyt)Możesz używać
int
cały czas, aleInteger
zawiera kilka pomocniczych metod, które mogą pomóc w wykonywaniu skomplikowanych operacji na liczbach całkowitych (takich jakInteger.parseInt(String)
)źródło
a) klasa obiektu „Long” a typ pierwotny „long”. (Przynajmniej w Javie)
b) Istnieją różne (nawet niejasne) rozmiary pamięci typów pierwotnych:
Java - wszystko jasne: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. po prostu bałagan: https://en.wikipedia.org/wiki/C_data_types
źródło