在Java中,我们有原始数据类型和一堆包装类。我的问题是什么时候用什么?我知道当我们需要创建集合时,我们需要使用包装类,但除此之外是否有其他特定情况应该使用包装类?
另外,除非绝对必要,否则应始终使用原始数据类型?
例如,如果我正在创建一个具有整数和布尔属性的类:
Class MyClass {
...
private Integer x;
private Boolean y;
...
}
OR
Class MyClass {
...
private int x;
private boolean y;
...
}
哪些应该更经常使用?在什么情况下应该使用另一个?
答案 0 :(得分:20)
除非您没有其他选择,否则请使用基元类型。它不可为空的事实将防止许多错误。而且他们也更快。
除了集合之外,包装器类型通常用于表示可以为空的值(例如,来自数据库可为空的列)。
答案 1 :(得分:5)
this article谈论包装类,他们说:
Java API中的包装器类有两个主要目的:
1-提供一种机制来“包装”对象中的原始值,以便这样做 基元可以包含在为对象保留的活动中, 比如被添加到集合中,或者从带有的方法返回 对象返回值。
2-提供各种实用功能 原语。这些功能大多与各种功能有关 转换:将原语转换为String对象和从String对象转换 将基元和String对象转换为不同的基础 (或基数),例如二进制,八进制和十六进制。
答案 2 :(得分:3)
包装类是不可变的,因此没有setter方法。每次要更改其值时,都必须创建一个新对象。这会产生不必要的对象。 int原语只表示数字的位。您没有创建任何新对象。因此,我建议在不使用集合时使用原语。
答案 3 :(得分:1)
当您的系统产生必须考虑的不确定性水平时,包装类非常有用。例如,在数据包捕获程序(如wireshark)中使用布尔值,如果无法确定是否已从发送方修改数据包,则允许您传递空值。特别是在您能够确定其他数据包操作的情况下。
答案 4 :(得分:0)
在c#中使用原始类型时,我更喜欢在访问静态成员时在声明和.NET名称中使用c#别名。这只是个人偏好。这两个名字绝对相同。
int x = Int32.Parse("123");