5

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

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

谢谢!

4

4 回答 4

8

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

  • 将它们存储在 Collection 中,例如Map
  • 使用它们作为模板参数
  • 给他们一个null
  • 以更一般的方式使用它们(例如Longas Number

例子:

new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );
于 2010-05-21T06:17:03.063 回答
4

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

因此我可以写:

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

但以下是编译错误:

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

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

于 2010-05-21T06:18:38.007 回答
4

有时您确实需要一个可以为空的值,例如,如果您的应用程序存储用户数据,则社会保障号可能是未知的。在这种情况下,存储 null 而不是 -1 会更干净。

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

于 2010-05-21T06:19:43.970 回答
1

基元总是更快。
然而,有时对象真的很有用:
1. 向上转型。您的函数可以将 Number(是所有数字对象的父对象:Integer、Float 等)作为参数。
2. 可能的空值。例如,它在存储在数据库中时使用。对象可以为空,基元必须有值。因此,如果 db 中的字段可以为空,则最好使用原始值的对象版本。
3.如果函数接受对象并且你总是给它一个原语,那么自动装箱(将原语变成对象)会产生费用。从函数返回也是如此。
4. 对象有一定的方法,比如getHashcode()、toString()等,在某些情况下真的很有用。

于 2010-05-21T06:29:24.540 回答