A volte vedo che le API utilizzano longo Longo into Integere non riesco a capire come viene presa la decisione?
Quando dovrei scegliere cosa?
A volte vedo che le API utilizzano longo Longo into Integere non riesco a capire come viene presa la decisione?
Quando dovrei scegliere cosa?
Risposte:
Longè la Objectforma di longed Integerè la forma oggetto di int.
Il longutilizza 64 bit . Le intutilizza 32 bit, e quindi può contenere solo numeri fino a ± 2 miliardi (-2 31 a +2 31 -1).
È necessario utilizzare longe int, tranne dove è necessario utilizzare metodi ereditati da Object, ad esempio hashcode. Java.util.collectionsi metodi di solito usano le Objectversioni in box ( -wrapped), perché devono funzionare per qualsiasi Object, e un tipo primitivo, come into long, non è un Object.
Un'altra differenza è che sono longe pass-by-value , mentre e sono pass-by-reference value , come tutti i tipi Java non primitivi. Quindi, se fosse possibile modificare un o (non lo sono, sono immutabili senza usare il codice JNI), ci sarebbe un altro motivo per usarne uno rispetto all'altro.intLongIntegerLongInteger
Un'ultima differenza è che a Longo Integerpotrebbe essere null.
Ci sono un paio di cose che non puoi fare con un tipo primitivo:
nullvaloreObjectsA meno che tu non ne abbia bisogno, dovresti preferire i tipi primitivi, poiché richiedono meno memoria.
int, quando tieni i numeri.intè troppo piccolo, utilizzare alonglongè troppo piccolo, utilizzareBigIntegerCollection, gestione null, ...) usa Integer/ LonginveceAn intè un numero intero a 32 bit; a longè un numero intero a 64 bit. Quale usare dipende da quanto grandi sono i numeri con cui ti aspetti di lavorare.
inte longsono tipi primitivi, mentre Integere Longsono oggetti. I tipi primitivi sono più efficienti, ma a volte è necessario utilizzare oggetti; per esempio, le classi di raccolta di Java può solo lavoro con gli oggetti, quindi se avete bisogno di una lista di interi che si devono fare una List<Integer>, per esempio (non è possibile utilizzare intin un Listdiretto).
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 l'utilizzo di una variabile rientra nell'intervallo a 32 bit, utilizzare Int, altrimenti utilizzare long. Di solito lungo viene usato per calcoli scientifici e cose del genere richiedono molta precisione. (es. valore di pi).
Un esempio di scelta l'uno sull'altro è il caso di YouTube. Per prima cosa hanno definito il contatore delle visualizzazioni video come un
intoverflow quando più di 2.147.483.647 visualizzazioni sono state ricevute per un video popolare. Poiché unIntcontatore non può memorizzare alcun valore oltre il suo intervallo, YouTube ha modificato il contatore in una variabile a 64 bit e ora può contare fino a 9.223.372.036.854.775.807 visualizzazioni. Comprendi i tuoi dati e scegli il tipo che si adatta come variabile a 64 bit occuperà il doppio della memoria rispetto a una variabile a 32 bit.
Quando si tratta di utilizzare un numero molto lungo che può superare i 32 bit da rappresentare, è possibile utilizzare long per assicurarsi di non avere comportamenti strani.
Da Java 5 è possibile utilizzare le funzionalità di boxing e out-boxing per rendere int e l'uso di int e Integer completamente uguali. Significa che puoi fare:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Il dentro e fuori la boxe permettono di passare tra int e Integer senza alcuna conversione aggiuntivo (lo stesso per Long, Double, Shorttroppo)
Puoi usare int tutto il tempo, ma Integercontiene alcuni metodi di aiuto che possono aiutarti a fare alcune operazioni complesse con numeri interi (come Integer.parseInt(String))
a) classe oggetto "Long" contro tipo primitivo "long". (Almeno in Java)
b) Esistono diverse (anche poco chiare) dimensioni di memoria dei tipi primitivi:
Java: tutto chiaro: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. solo pasticcio: https://en.wikipedia.org/wiki/C_data_types