Às vezes, vejo APIs usando long
or Long
ou int
or Integer
e não consigo entender como a decisão é tomada para isso?
Quando devo escolher o que?
Às vezes, vejo APIs usando long
or Long
ou int
or Integer
e não consigo entender como a decisão é tomada para isso?
Quando devo escolher o que?
Respostas:
Long
é a Object
forma de long
e Integer
é a forma de objeto de int
.
O long
usa 64 bits . Ele int
usa 32 bits e, portanto, pode armazenar apenas números de até ± 2 bilhões (-2 31 a +2 31 -1).
Você deve usar long
e int
, exceto onde você precisar fazer uso de métodos herdados Object
, como hashcode
. Java.util.collections
Os métodos geralmente usam as Object
versões in a box ( -wrapped), porque precisam funcionar para qualquer um Object
, e um tipo primitivo, como int
ou long
, não é umObject
.
Outra diferença é que long
e int
estão de passagem por valor , enquanto Long
e Integer
são pass-by-referência de valor , como todos os tipos não-primitivos Java. Portanto, se fosse possível modificar um Long
ou Integer
(não é, eles são imutáveis sem usar o código JNI), haveria outro motivo para usar um sobre o outro.
Uma diferença final é que um Long
ou Integer
poderia ser null
.
Há algumas coisas que você não pode fazer com um tipo primitivo:
null
valorObject
sA menos que você precise de um desses, você deve preferir tipos primitivos, pois eles exigem menos memória.
int
, ao manter números.int
for muito pequeno, use umlong
long
for muito pequeno, useBigInteger
Collection
, manipulação null
, ...) use Integer
/ em Long
vez dissoAn int
é um número inteiro de 32 bits; a long
é um número inteiro de 64 bits. Qual deles usar depende do tamanho dos números com os quais você espera trabalhar.
int
e long
são tipos primitivos, enquanto Integer
e Long
são objetos. Tipos primitivos são mais eficientes, mas às vezes você precisa usar objetos; por exemplo, as classes de coleção do Java podem funcionar apenas com objetos; portanto, se você precisar de uma lista de números inteiros, precisará transformá-la em List<Integer>
, por exemplo (você não pode usá int
-la List
diretamente).
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Se o uso de uma variável estiver no intervalo de 32 bits, use Int
, caso contrário, use long
. Geralmente longo é usado para cálculos científicos e coisas assim precisam de muita precisão. (por exemplo, valor de pi).
Um exemplo de escolha de um sobre o outro é o caso do YouTube. Primeiro, eles definiram o contador de visualizações de vídeo como
int
excedente quando mais de 2.147.483.647 visualizações foram recebidas em um vídeo popular. Como umInt
contador não pode armazenar nenhum valor além do seu intervalo, o YouTube alterou o contador para uma variável de 64 bits e agora pode contar até 9.223.372.036.854.775,807 visualizações. Entenda seus dados e escolha o tipo que se ajusta à variável de 64 bits, que consumirá o dobro da memória do que uma variável de 32 bits.
Quando se trata de usar um número muito longo que pode exceder 32 bits para representar, você pode usar muito tempo para garantir que não tenha um comportamento estranho.
No Java 5, você pode usar os recursos de entrada e saída para tornar o uso de int e Inteiro completamente o mesmo. Isso significa que você pode fazer:
int myInt = new Integer(11);
Integer myInt2 = myInt;
O dentro e fora do boxe permitem alternar entre int e Integer sem qualquer conversão adicional (o mesmo para Long
, Double
, Short
também)
Você pode usar int
o tempo todo, mas Integer
contém alguns métodos auxiliares que podem ajudá-lo a executar algumas operações complexas com números inteiros (como Integer.parseInt(String)
)
a) classe de objeto "Long" versus tipo primitivo "long". (Pelo menos em Java)
b) Existem tamanhos de memória diferentes (até pouco claros) dos tipos primitivos:
Java - tudo limpo: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. apenas bagunça: https://en.wikipedia.org/wiki/C_data_types