2013-05-23 11 views
6

Próbowałem napisać AsycTask w aplikacji dla systemu Android. Tam natknąłem się na typy danych Integer i Long i nie jestem pewien, czym one są. Próbowałem za pomocą long w miejscu Long, ale mam błąd w Eclipse mówiącJaka jest różnica między długim i długim w kodzie android?

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

Możesz przeczytać o Java Boxing/Unboxing, dlatego możesz nie zauważyć różnicy przed: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – onit

Odpowiedz

19

Long to klasa. długi jest prymitywny. Oznacza to, że Long może być wartością null, gdzie długo nie może. Długo może iść w dowolne miejsce, które zajmuje Obiekt, długo nie może (ponieważ nie jest klasą, która nie pochodzi z Obiektu).

Java zwykle tłumaczy długo na długi automatycznie (i na odwrót), ale nie będzie dla wartości null (ponieważ długo nie może być pusty) i musisz użyć wersji długiej, gdy potrzebujesz zaliczenie klasy (na przykład w deklaracji ogólnej).

1

Integer i długo obiektów owijarki na int i długie prymitywnych typów danych.

AsyncTask używa generycznych do określenia wartości, a generics przyjmuje tylko Obiekty jako parametry.

0

AsyncTask wykorzystuje parametry ogólne, które wymagają parametrów typu referencyjnego. long jest typem pierwotnym, więc nie jest dozwolone. Z drugiej strony Long jest klasą, więc należy go użyć.

0

long jest typem danych pierwotnych, a Long jest obiektem.
AsyncTask może przyjmować tylko jako obiekty parametrów.

6

P: Jaka jest różnica między "długimi" i "długimi"?

A: Ten pierwszy jest "prymitywny"; ten drugi to "obiekt".

Oto wielki artykuł sugeruje, dlaczego może wolisz "Long" ("Przedmiot wrapper"):

Primitive Types Considered Harmful

PS:

Istnieje wiele korzyści z używania "długi" wrapper obiektów (w tym wartości "null") i wiele zalet korzystania z "długiego" prymitywu (w tym zwięzłość i wydajność).

"Boxing" i "Unboxing" to mechanizm zmiany między jednym a drugim. Innym dobrym Link:

Using Boxing With Care

+0

Dzięki za artykuł. Wyjaśniło wiele wątpliwości. –

0

Długa jest formą Przedmiot długo ...

Należy używać długo i int wyjątkiem sytuacji, gdy trzeba skorzystać z metod odziedziczonych obiektu, takich jak hashcode. Metody java.util.collections zwykle używają wersji pudełkowych (owiniętych obiektami), ponieważ muszą działać dla dowolnego obiektu, a long jest również wartością pass-by-value, podczas gdy Long jest wartością typu pass-by-reference, jak wszystkie inne. prymitywne typy Java

również długo może być null

0

Trzeba też zdawać sobie sprawę z miejsca, które obaj podjąć.

Long dziedziczy z innej klasy, a także zawiera inne wartości wewnątrz:

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 jest tylko jeden prymitywny, że zajmuje 8 bajtów przestrzeni.

Może to mieć istotne znaczenie, gdy mamy do czynienia z dużą ilością danych przechowywanych w pamięci lub wysyłanych przez sieć.

Powiązane problemy