16

在 Java 中,我们有原始数据类型和一堆包装类。我的问题是什么时候用什么?我知道当我们需要创建集合时,我们将需要使用包装类,但除此之外还有其他特定情况应该使用包装类吗?

此外,除非绝对必要,否则是否应该始终使用原始数据类型?

例如,如果我正在创建一个具有整数和布尔属性的类:

Class MyClass {
    ...
    private Integer x;
    private Boolean y;
    ...
}

或者

Class MyClass {
    ...
    private int x;
    private boolean y;
    ...
}

哪一个应该更频繁地使用?在什么情况下应该使用另一个?

4

5 回答 5

24

Use the primitive type unless you have no other choice. The fact that it's not nullable will prevent many bugs. And they're also faster.

Besides collections, wrapper types are typically used to represent a nullable value (for example, coming from a database nullable column).

于 2012-12-16T14:35:43.393 回答
5

这篇文章谈到了包装类,他们说:

Java API 中的包装类有两个主要用途:

1- 提供一种在对象中“包装”原始值的机制,以便可以将原始值包含在为对象保留的活动中,例如添加到集合中,或从具有对象返回值的方法返回。

2- 为原语提供各种实用功能。这些函数中的大多数都与各种转换有关:将基元与字符串对象相互转换,以及将基元和字符串对象与不同的基数(或基数)相互转换,例如二进制、八进制和十六进制。

于 2012-12-16T14:47:21.950 回答
4

包装类是不可变的,因此没有设置方法。每次您想要更改其值时,都必须创建一个新对象。这将创建不必要的对象。int 原语只表示数字的位。您没有创建任何新对象。因此,我建议在不使用集合时使用原语。

于 2012-12-16T14:45:48.383 回答
1

当您的系统产生必须考虑的不确定性级别时,包装类可能会非常有用。例如,在wireshark 等数据包捕获程序中使用布尔值,如果您无法确定数据包是否已从发送方修改,则允许您传递空值。特别是在您能够确定其他数据包操作的情况下。

于 2012-12-16T14:41:59.767 回答
0

在 c# 中使用原始类型时,我更喜欢在声明中使用 c# 别名,并在访问静态成员时使用 .NET 名称。这只是个人喜好。这两个名字是绝对等价的。

int x = Int32.Parse("123");
于 2012-12-16T14:56:49.283 回答