2013-05-23 6 views
6

Ich habe versucht, eine AsycTask in einer Android-Anwendung zu schreiben. Dort bin ich auf die Datentypen Integer und Long gestoßen und bin mir nicht sicher, was sie sind. Ich habe versucht, long anstelle mit Long, aber ich habe einen Fehler in Eclipse sagenWas ist der Unterschied zwischen Long und Long in Android-Code?

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

Vielleicht möchten Sie etwas über Java Boxing/Unboxing lesen, weshalb Sie vielleicht den Unterschied vorher nicht bemerkt haben: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – onit

Antwort

19

Long ist eine Klasse. lang ist ein Primitiv. Das heißt, Long kann null sein, wo lang nicht. Long kann überall hingehen, wo ein Objekt abgelegt wird, lange nicht (da es keine Klasse ist, die es nicht von Object ableitet).

Java übersetzt normalerweise ein Long in ein Long automatisch (und umgekehrt), aber nicht für Nullen (da ein Long nicht Null sein kann), und Sie müssen die Long-Version verwenden, wenn Sie müssen Übergeben Sie eine Klasse (wie in einer generischen Deklaration).

1

Integer und Lange sind Objekt-Wrapper auf der int und lange primitive Datentypen.

AsyncTask verwendet Generics, um jedoch Werte zu bestimmen und Generics nimmt nur Objekte als Parameter.

0

AsyncTask verwendet generische Parameter, die Referenztypparameter erfordern. long ist ein primitiver Typ, also ist nicht erlaubt. Auf der anderen Seite ist Long eine Klasse, so sollte stattdessen verwendet werden.

0

long ist ein primitiver Datentyp, während Long ein Objekt ist.
AsyncTask kann nur als Parameter Objekte nehmen.

6

F: Was ist der Unterschied zwischen "lang" und "lang"?

A: Ersteres ist ein "primitives"; Letzteres ist ein "Objekt".

Hier ist ein großer Artikel ist darauf hindeutet, warum Sie "Long" (das "Objekt-Wrapper") bevorzugen:

Primitive Types Considered Harmful

PS:

Es gibt viele Vorteile, die "Long" zu verwenden Objekt-Wrapper (einschließlich "Null" -Werte) und viele Vorteile bei der Verwendung des "langen" Primitivs (einschließlich Prägnanz und Effizienz).

"Boxen" und "Unboxing" ist der Mechanismus, um zwischen den einen und anderen zu wechseln. Eine weitere gute Verbindung:

Using Boxing With Care

+0

Danke für der Artikel. Es hat viele Zweifel geklärt. –

0

Long ist das Objekt Form von langen ...

Sie lange verwenden sollten und int es sei denn, Sie benötigen Einsatz von Methoden von Object, wie Hash-Code geerbt zu machen. java.util.collections-Methoden verwenden normalerweise die Boxed (Object-Wrapped) Versionen, da sie für jedes Objekt funktionieren müssen. primitive Java-Typen

auch kann lange null sein

0

Sie müssen auch bewusst den Raum sein, die von ihnen nehmen beide.

Long inherits von einer anderen Klasse und enthält auch andere Werte innen:

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 ist nur eine einzige Primitive, dass 8 Bytes von Raum in Anspruch nimmt.

Dies kann sehr relevant werden, wenn Sie mit vielen Daten arbeiten, die im Speicher gespeichert oder über ein Netzwerk gesendet werden.

Verwandte Themen