1

我的问题是在 Java 应用程序中使用盒装原语与使用原语相比有哪些优点和缺点?

以下是一些可能正确也可能不正确的优点和缺点:

一个优点是允许空值,因此该类型与可能允许空值的数据库类型更接近。

盒装原语的另一个优点是创建防御性副本不需要您初始化另一种原语类型,只需要初始化一个指针,这样可以节省时间。

盒装原语的一个缺点是它们在性能方面比原语更昂贵,但流行的观点似乎是,当性能成为问题时,在以后的开发中,费用值得担心。

另一个缺点是,将盒装原语与 '==' 进行比较似乎会导致比较指针而不是基础类型。

你对这些优点或缺点有反馈吗?你知道其他的吗?

提前致谢。

4

2 回答 2

4

盒装原语相对于常规原语的最大优势是能够在标准 Java 集合中使用它们。例如,可以制作 an ArrayList<Integer>,但不能制作ArrayList<int>

它们最大的缺点是内存和性能方面的成本:根据架构和底层类型,内存方面的成本可能高达 9 倍(考虑byte在 64 位平台上装箱)。性能成本是双重的:每次需要值时都需要额外的拆箱周期,但更重要的是,内存占用会影响访问实际内存的顺序,这可能会降低 CPU 数据缓存的效率。

您列出的其他优点/缺点也适用:

  • 盒装原语可以为空,
  • 您不需要复制一个值,只需要一个引用(只有当引用的大小小于数据的大小时,例如当您Long在 32 位平台上具有 a 时,这才能节省您的时间和空间)。
  • 盒装原语更难比较相等/不等式。

“防御性复制”这一点不适用,因为 Java 中的所有装箱原语都是不可变的。

于 2013-05-31T15:59:44.263 回答
0

集合框架和泛型专门使用对象。所以拳击变得必不可少。在泛型中,Java 做了一种称为类型擦除的事情。

当编译器找到泛型类型或方法的定义时,它会删除类型参数的所有 > 出现并用它们最左边的边界替换它们,如果没有指定边界,则类型 >Object。

这意味着您永远不能在泛型中拥有原始类型。

于 2013-05-31T16:08:47.560 回答