7

我试图在一个 android 应用程序中编写一个 AsycTask。在那里我遇到了 Integer 和 Long 数据类型,但我不确定它们是什么。我尝试long就地使用Long,但在 Eclipse 中出现错误提示

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

7 回答 7

22

龙是一类。long 是一个原始的。这意味着 Long 可以为空,而 long 不能。Long 可以去任何需要 Object 的地方,long 不能(因为它不是一个类,它不是从 Object 派生的)。

Java 通常会自动将 Long 转换为 long(反之亦然),但不会用于 null(因为 long 不能为 null),并且当您需要传递类时需要使用 Long 版本(例如在通用声明中)。

于 2013-05-23T18:11:32.720 回答
8

问:“长”和“长”有什么区别?

A:前者是“原始人”;后者是一个“对象”。

这是一篇很棒的文章,说明了为什么您可能更喜欢“Long”(“对象包装器”):

被认为是有害的原始类型

PS:

使用“Long”对象包装器有很多优点(包括“null”值),使用“long”原语有很多优点(包括简洁和高效)。

“装箱”和“拆箱”是在一个和另一个之间转换的机制。另一个很好的链接:

谨慎使用拳击

于 2013-05-23T18:11:40.203 回答
1

Integer 和 Long 是 int 和 long 原始数据类型的对象包装器。

AsyncTask 使用泛型来确定值,但是泛型仅将对象作为参数。

于 2013-05-23T18:11:19.647 回答
0

AsyncTask使用需要引用类型参数的泛型参数。long是原始类型,因此是不允许的。另一方面Long是一个类,所以应该使用它。

于 2013-05-23T18:11:23.887 回答
0

long 是原始数据类型,而 Long 是对象。
AsyncTask 只能作为参数对象。

于 2013-05-23T18:11:26.413 回答
0

Long是long的宾语形式...

您应该使用 long 和 int,除非您需要使用从 Object 继承的方法,例如 hashcode。java.util.collections 方法通常使用盒装(对象包装)版本,因为它们需要适用于任何对象

long 也是按值传递,而 Long 是按引用传递值,就像所有非原始 Java 类型一样

此外,Long 可以为空

于 2013-05-23T18:14:36.997 回答
0

您还必须注意它们占用的空间。

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 个字节空间的原语。

当您处理大量存储在内存中或通过网络发送的数据时,这可能变得非常重要。

于 2017-02-03T10:08:51.640 回答