Lang versus geheel getal, lang versus int, wat te gebruiken en wanneer?

Soms zie ik API’s die Longof Longof Intof Integergebruiken, en ik kom er niet uit hoe wordt daartoe besloten?

Wanneer moet ik wat kiezen?


Antwoord 1, autoriteit 100%

Longis de Object-vorm van Longen Integeris de objectvorm van Int.

De Longgebruikt 64 bits. De Intgebruikt 32 bits en kan dus alleen getallen tot ±2 miljard bevatten (-231tot +231-1).

U moet Longen Intgebruiken, behalve wanneer u gebruik moet maken van methoden die zijn overgenomen van Object, zoals hashcode. Java.util.collections-methoden gebruiken meestal de in een doos verpakte (Object-verpakte) versies, omdat ze moeten werken voor elk Objecten een primitief type, zoals Intof Long, is geen Object.

Een ander verschil is dat Longen Intpass-by-valuezijn, terwijl Longen Integerzijn pass-by-reference-waarde, zoals alle niet-primitieve Java-typen. Dus als het mogelijk zou zijn om een Longof Integerte wijzigen (dat is niet zo, ze zijn onveranderlijk zonder JNI-code te gebruiken), zou er nog een reden zijn om de een boven de ander te gebruiken .

Een laatste verschil is dat een Longof Integernullkan zijn.


Antwoord 2, autoriteit 15%

Er zijn een aantal dingen die je niet kunt doen met een primitief type:

  • Een nullwaarde hebben
  • op hen synchroniseren
  • Gebruik ze als type parameter voor een generieke klasse, en gerelateerd aan dat:
  • Geef ze door aan een API die werkt met Objects

Tenzij je een van deze nodig hebt, zou je de voorkeur moeten geven aan primitieve typen, omdat ze minder geheugen nodig hebben.


Antwoord 3, autoriteit 13%

  • Gebruik standaard een Intals je getallen vasthoudt.
  • Als het bereik van Intte klein is, gebruik dan een Long
  • Als het bereik van Longte klein is, gebruik dan BigInteger
  • Als u uw getallen als object moet behandelen (bijvoorbeeld wanneer u ze in een Collectionplaatst, null, …) gebruikt, gebruik dan Integer/Longin plaats daarvan

Antwoord 4, autoriteit 6%

Een Intis een 32-bits geheel getal; a Longis een 64-bits geheel getal. Welke je moet gebruiken, hangt af van hoe groot de getallen zijn waarmee je verwacht te werken.

Inten Longzijn primitieve typen, terwijl Integeren Longobjecten zijn. Primitieve typen zijn efficiënter, maar soms moet je objecten gebruiken; de verzamelklassen van Java kunnen bijvoorbeeld alleen met objecten werken, dus als u een lijst met gehele getallen nodig hebt, moet u er een List<Integer>van maken (u kunt Intrechtstreeks in een List).


Antwoord 5, autoriteit 5%

Integeris een 32-bits integer type met teken

  • Aangeduid als Int
  • Grootte = 32 bits (4byte)
  • Kan gehele getallen bevatten van -2,147,483,648 to 2,147,483,647
  • standaardwaarde is 0

Langis een ondertekend 64-bits geheel getal

  • Aangeduid als Long
  • Grootte = 64 bits (8byte)
  • Kan gehele getallen bevatten van -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • standaardwaarde is 0L

Als uw gebruik van een variabele binnen het bereik van 32 bits valt, gebruik dan Int, gebruik anders Long. Meestal wordt lang gebruikt voor wetenschappelijke berekeningen en dat soort dingen hebben veel nauwkeurigheid nodig. (bijv. waarde van pi).

Een voorbeeld van het kiezen van de een boven de ander is het geval van YouTube.Ze definieerden eerst de videoweergaveteller als een Intdie overstroomde toen er meer dan 2.147.483.647 weergaven werden ontvangen op een populair filmpje. Aangezien een Int-teller geen waarde kan opslaan die groter is dan het bereik, heeft YouTube de teller gewijzigd in een 64-bits variabele en kan nu worden geteld tot 9.223.372.036.854.775.807 weergaven. Begrijp uw gegevens en kies het type dat past omdat 64-bits variabele dubbel zoveel geheugen in beslag neemt dan een 32-bits variabele.


Antwoord 6

Als het gaat om het gebruik van een heel lang getal dat de 32 bits kan overschrijden, kun je long gebruiken om ervoor te zorgen dat je geen vreemd gedrag vertoont.

Vanaf Java 5 kunt u in-boxing- en out-boxing-functies gebruiken om het gebruik van int en Integer volledig hetzelfde te maken. Het betekent dat je het volgende kunt doen:

int myInt = new Integer(11);
Integer myInt2 = myInt;

Met in- en uitboxen kun je wisselen tussen int en Integer zonder extra conversie (hetzelfde voor Long,Double,Shortook )

U kunt intde hele tijd gebruiken, maar Integerbevat enkele helpermethoden die u kunnen helpen om wat complexe operaties met gehele getallen te doen (zoals Integer.parseInt(String))


Antwoord 7

a) object class “lang” versus primitief type “lang”. (Tenminste in Java)

b) Er zijn verschillende (zelfs onduidelijke) geheugenformaten van de primitieve typen:

Java – All Clear: https://docs.Or. COM / JAVASE / TUTORIAL / JAVA / NUMSANDBOLTS / DATATYPES.HTML

  • byte, char .. 1b .. 8b
  • Short int .. 2b .. 16b
  • int .. .. .. 4b .. 32b
  • lange int .. 8b .. 64b

c .. gewoon rotzooi: https://en.wikipedia.org/wiki/c_data_types

  • kort .. 16b
  • int .. .. 16b … WTF?!?!
  • lang .. 32b
  • lang lang .. 64b .. puinhoop! : – /

Other episodes