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有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章