对象或基元类型

时间:2010-05-21 06:14:07

标签: java autoboxing

有人可以向我解释使用Integer,Boolean等代替JAVA中的原始类型吗?

我似乎无法掌握他们提供的优势。它们似乎会产生处理空值的不必要的问题。

谢谢!

4 个答案:

答案 0 :(得分:8)

BooleanIntegerLong,...是对象。您可以在不能使用基本类型的地方使用它们,例如

  • 将它们存储在像Map
  • 这样的集合中
  • 将它们用作模板参数
  • 为他们分配null
  • 以更一般的方式使用它们(例如LongNumber

<强>示例:

new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );

答案 1 :(得分:4)

Integer,Boolean等的基本原理是允许在需要引用类型的上下文中使用基元类型。经典用例是集合API,它提供集合,列表,映射,队列等,其中元素类型必须是某种引用类型。

因此我可以写:

List<Integer> list = new ArrayList<Integer>();

但以下是编译错误:

List<int> list = new ArrayList<int>();

请注意,原始包装类型的这种用例早于泛型类型和“新”集合API,并且可以追溯到唯一的集合类型是{{1的原始(通用)形式的日子。 }和Vector,以及他们的同类。

答案 2 :(得分:4)

有时你真的需要一个可以为空的值,例如,如果你的应用程序存储用户数据,社会安全#可能是未知的。在这种情况下,存储null而不是-1更清晰。

还有一些你不能用原始类型做的事情,比如将它们存储在地图中或使用多态(Double和Integer都是Number的实例)。

答案 3 :(得分:1)

原语总是更快 但是有时候,物体真的很有用:
向上倾斜您的函数可以为参数采用Number(所有数字对象的父对象:Integer,Float等) 2.可能的空值。例如,它在存储在数据库中时使用。对象可以为null,原语必须具有值。因此,如果db中的字段可以为空,则最好使用原始值的对象版本 3.如果函数接受对象并且你总是给它一个原语,那么自动装箱就会有费用(将原语变成对象)。从功能返回也是如此 4.对象具有某些方法,例如getHashcode(),toString()等,在某些情况下这些方法非常有用。