2013-05-23 10 views
6

Stavo cercando di scrivere un AsycTask in un'applicazione Android. Lì ho trovato tipi di dati Integer e Long e non sono sicuro di cosa siano. Ho provato ad utilizzare long in luogo Long, ma ho ottenuto un errore in Eclipse direQual è la differenza tra long e long nel codice Android?

'Syntax error on token "long", Dimensions expected after this token'. 
+0

Si potrebbe voler leggere su Java Boxing/Unboxing, motivo per cui potrebbe non aver notato la differenza prima: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – onit

risposta

19

Lungo è una classe. lungo è un primitivo. Ciò significa che Long può essere nullo, dove a lungo non può. Lungo può andare ovunque che prende un oggetto, a lungo non può (dal momento che non è una classe che non deriva da Object).

Java tradurrà solitamente Long in long automaticamente (e viceversa), ma non per null (poiché un long non può essere un null), e devi usare la versione Long quando hai bisogno di passare una classe (come in una dichiarazione generica).

1

Integer e Long sono wrapper di oggetti sul int e tipi di dati primitivi lunghi.

AsyncTask utilizza i generici per determinare i valori tuttavia e generici accetta solo gli oggetti come parametri.

0

AsyncTask utilizza parametri generici che richiedono parametri di tipo di riferimento. long è un tipo primitivo quindi non è consentito. D'altra parte Long è una classe quindi dovrebbe essere usato invece.

0

long è un tipo di dati primitivo mentre Long è un oggetto.
AsyncTask può prendere solo come oggetti parametri.

6

Q: Qual è la differenza tra "long" e "long"?

A: Il primo è un "primitivo"; il secondo è un "oggetto".

Questo vuole essere un grande articolo suggerendo il motivo per cui si potrebbe preferire "Long" (il "wrapper oggetto"):

Primitive Types Considered Harmful

PS:

Ci sono molti vantaggi di utilizzare il "Long" object wrapper (compresi i valori "null") e molti vantaggi nell'usare la primitiva "lunga" (compresa la concisione e l'efficienza).

"Boxing" e "Unboxing" è il meccanismo per cambiare tra uno e l'altro. Un altro buon link:

Using Boxing With Care

+0

Grazie per l'articolo. Ha chiarito molti dubbi. –

0

Lunga è la forma oggetto di una lunga ...

Si consiglia di utilizzare a lungo e int, tranne in cui è necessario fare uso di metodi ereditati da Object, come il codice hash. i metodi java.util.collections di solito usano le versioni in scatola (Object wrapping) perché devono lavorare per qualsiasi oggetto

long è anche valore pass-by mentre, Long è un valore di riferimento pass-by come tutti i non- tipi Java primitivi

inoltre, a lungo può essere nullo

0

Bisogna anche essere consapevoli dello spazio che entrambi prendono.

Long eredita da un'altra classe e contiene anche altri valori all'interno:

public final class Long extends Number implements Comparable<Long> { 
    @Native public static final long MIN_VALUE = 0x8000000000000000L; 
    @Native public static final long MAX_VALUE = 0x7fffffffffffffffL; 
} 

long è solo un singolo primitiva che occupa 8 byte di spazio.

Questo può diventare molto rilevante quando si ha a che fare con un sacco di dati memorizzati in memoria o inviati attraverso una rete.