2013-05-23 3 views
6

私はアンドロイドアプリケーションでAsycTaskを書き込もうとしていました。 Integer型とLong型のデータ型が出てきて、そのデータ型がわからない。私は場所Longlongを使用してみましたが、私はアンドロイドコードのロングとロングの違いは何ですか?

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

Javaボクシング/アンボクシングについて読んでみることをお勧めします。これは前にその違いに気づいていなかった理由です:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – onit

答えて

19

ロングはクラスです。 longはプリミティブです。これは、Longがnullである可能性があることを意味します。 LongはObjectをとる場所には移動できます(Objectから派生しないクラスではないため)ことはできません。

Javaは、通常、Longを自動的にlongに変換します(またその逆もあります)が、nullの場合は(longはnullにはならないため)、Longバージョンを使用する必要がありますクラスを渡す(ジェネリック宣言など)。

1

整数を言って日食中にエラーが発生しましたし、ロングはintとlongのプリミティブデータ型のオブジェクトラッパーです。

AsyncTaskはジェネリックを使用して値を決定しますが、ジェネリックスはオブジェクトのみをパラメータとして使用します。

0

AsyncTaskは、参照型パラメータを必要とする汎用パラメータを使用します。 longはプリミティブ型なので許可されていません。一方、Longはクラスなので代わりに使用する必要があります。

0

longはプリミティブデータ型ですが、Longはオブジェクトです。
AsyncTaskは、パラメータオブジェクトとしてのみ使用できます。

6

Q:「long」と「Long」の違いは何ですか?

A:前者は「プリミティブ」です。後者は「オブジェクト」です。ここで

は、あなたが「ロング」(「オブジェクトラッパー」)を好む理由を示唆素晴らしい記事です:

Primitive Types Considered Harmful

PS:

「ロング」を使用することには多くの利点があります。オブジェクトラッパー(「null」値を含む)、および「長い」プリミティブ(簡潔さと効率を含む)を使用することに多くの利点があります。

「ボクシング」と「アンボクシング」は、一方と他方の間で変更する仕組みです。もう一つの良いリンク:

Using Boxing With Care

+0

ありがとう記事。それは多くの疑念を明らかにした。 –

0

ロングは、あなたが長い間使用していて、このようなハッシュコードのようにObjectから継承されたメソッドの使用をする必要がある場合を除き、int型べきで長いのオブジェクトの形...

です。 java.util.collectionsメソッドは、通常、ボックス化された(オブジェクトラップされた)バージョンを使用します。これは、すべてのオブジェクトで動作する必要があるためです。

longはパスバイ値で、プリミティブJava型

また、ロングはあなたがまた、それらの両方が取ることにスペースを認識する必要があり

0

nullにすることができます。

Long別のクラスから継承し、また内部の他の値が含ま:

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スペースの8つのバイトを占めているだけで単一のプリミティブです。

これは、大量のデータをメモリに格納したり、ネットワーク経由で送信したりする場合に非常に重要になります。

関連する問題