À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?
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.
fonte
int
, ao manter números.int
for muito pequeno, use umlong
long
for muito pequeno, useBigInteger
Collection
, manipulaçãonull
, ...) useInteger
/ emLong
vez dissofonte
An
int
é um número inteiro de 32 bits; along
é um número inteiro de 64 bits. Qual deles usar depende do tamanho dos números com os quais você espera trabalhar.int
elong
são tipos primitivos, enquantoInteger
eLong
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 emList<Integer>
, por exemplo (você não pode usáint
-laList
diretamente).fonte
Inteiro é um tipo inteiro assinado de 32 bits
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long é um tipo inteiro assinado de 64 bits
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, uselong
. Geralmente longo é usado para cálculos científicos e coisas assim precisam de muita precisão. (por exemplo, valor de pi).fonte
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:
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, masInteger
contém alguns métodos auxiliares que podem ajudá-lo a executar algumas operações complexas com números inteiros (comoInteger.parseInt(String)
)fonte
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
fonte