Às vezes, vejo APIs usando long or Longou intor Integere não consigo entender como a decisão é tomada para isso?
Quando devo escolher o que?
Às vezes, vejo APIs usando long or Longou intor Integere não consigo entender como a decisão é tomada para isso?
Quando devo escolher o que?
Respostas:
Longé a Objectforma de longe Integeré a forma de objeto de int.
O longusa 64 bits . Ele intusa 32 bits e, portanto, pode armazenar apenas números de até ± 2 bilhões (-2 31 a +2 31 -1).
Você deve usar longe int, exceto onde você precisar fazer uso de métodos herdados Object, como hashcode. Java.util.collectionsOs métodos geralmente usam as Objectversões in a box ( -wrapped), porque precisam funcionar para qualquer um Object, e um tipo primitivo, como intou long, não é umObject .
Outra diferença é que longe intestão de passagem por valor , enquanto Longe Integersão pass-by-referência de valor , como todos os tipos não-primitivos Java. Portanto, se fosse possível modificar um Longou 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 Longou Integerpoderia ser null.
Há algumas coisas que você não pode fazer com um tipo primitivo:
nullvalorObjectsA menos que você precise de um desses, você deve preferir tipos primitivos, pois eles exigem menos memória.
int, ao manter números.intfor muito pequeno, use umlonglongfor muito pequeno, useBigIntegerCollection, manipulação null, ...) use Integer/ em Longvez 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.
inte longsão tipos primitivos, enquanto Integere Longsã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 Listdiretamente).
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
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
intexcedente quando mais de 2.147.483.647 visualizações foram recebidas em um vídeo popular. Como umIntcontador 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, Shorttambém)
Você pode usar into tempo todo, mas Integerconté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