Soms zie ik API’s die Long
of Long
of Int
of Integer
gebruiken, en ik kom er niet uit hoe wordt daartoe besloten?
Wanneer moet ik wat kiezen?
Antwoord 1, autoriteit 100%
Long
is de Object
-vorm van Long
en Integer
is de objectvorm van Int
.
De Long
gebruikt 64 bits. De Int
gebruikt 32 bits en kan dus alleen getallen tot ±2 miljard bevatten (-231tot +231-1).
U moet Long
en Int
gebruiken, 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 Object
en een primitief type, zoals Int
of Long
, is geen Object
.
Een ander verschil is dat Long
en Int
pass-by-valuezijn, terwijl Long
en Integer
zijn pass-by-reference-waarde, zoals alle niet-primitieve Java-typen. Dus als het mogelijk zou zijn om een Long
of Integer
te 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 Long
of Integer
null
kan zijn.
Antwoord 2, autoriteit 15%
Er zijn een aantal dingen die je niet kunt doen met een primitief type:
- Een
null
waarde 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
Object
s
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
Int
als je getallen vasthoudt. - Als het bereik van
Int
te klein is, gebruik dan eenLong
- Als het bereik van
Long
te klein is, gebruik danBigInteger
- Als u uw getallen als object moet behandelen (bijvoorbeeld wanneer u ze in een
Collection
plaatst,null
, …) gebruikt, gebruik danInteger
/Long
in plaats daarvan
Antwoord 4, autoriteit 6%
Een Int
is een 32-bits geheel getal; a Long
is een 64-bits geheel getal. Welke je moet gebruiken, hangt af van hoe groot de getallen zijn waarmee je verwacht te werken.
Int
en Long
zijn primitieve typen, terwijl Integer
en Long
objecten 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 Int
rechtstreeks 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
Int
die overstroomde toen er meer dan 2.147.483.647 weergaven werden ontvangen op een populair filmpje. Aangezien eenInt
-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
,Short
ook )
U kunt int
de hele tijd gebruiken, maar Integer
bevat 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! : – /