android代码中的long和Long有啥区别?

Posted

技术标签:

【中文标题】android代码中的long和Long有啥区别?【英文标题】:What is the difference between long and Long in android code?android代码中的long和Long有什么区别? 【发布时间】:2013-05-19 05:31:07 【问题描述】:

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

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

【问题讨论】:

您可能想了解 Java Boxing/Unboxing,这就是为什么您之前可能没有注意到其中的区别:docs.oracle.com/javase/tutorial/java/data/autoboxing.html 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

Primitive Types Considered Harmful

PS:

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

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

Using Boxing With Care

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

Long 是 long 的 Object 形式...

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

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

另外,Long 可以为空

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

以上是关于android代码中的long和Long有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

c中的long和long int有啥区别? [复制]

Java中long和Long有啥区别

Java中long和Long有啥区别

在C#中long与int64有啥区别吗

Java中long和Long有啥区别

java long和java.lang.Long有啥区别?