2010-05-21 157 views
5

有人可以向我解释在JAVA中使用Integer,Boolean等替换它们的基本类型吗?对象或原始类型

我似乎无法把握他们提供的优势。他们似乎创建了处理空值的不必要的问题。

谢谢!

回答

8

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

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

示例:

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

要添加到答案中,一个实际的例子将存储变量在会话上下文中的Web应用程序。 – saugata 2010-05-21 06:23:09

+0

不仅Map,所有的容器类都要求它们的元素是Object,因此原始类型不能满足这个约束。我认为容器是面向过程语言的面向对象语言的一个方面,它为您带来很多便利。 :-) – 2010-05-21 06:26:30

4

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

因此我可以这样写:

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

但下面是一个编译错误:

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

注意,该用例的基本包装类型早都泛型类型和“新“收集API,并回溯到仅有的收集类型是原始(通用)形式的VectorHashtable及其同类的日子。

4

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

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

1

基元总是更快。
但是有次,当对象真的有用时:
1.向上转换。您的函数可以将Number(对于所有数值对象为整数,浮点数等)作为参数。
2.可能的空值。例如,它在数据库中存储时使用。对象可以为null,基元必须有价值。所以如果db中的字段为空,最好使用原始值的对象版本。
3.如果函数带有对象,并且您总是给它一个原型,那么在自动装箱(将原始对象转换为对象)上会有开销。从函数返回一样。
4.对象有一些特定的方法,比如getHashcode(),toString()等等,在某些情况下它确实有用。